Forum: Mikrocontroller und Digitale Elektronik STM32: Page Erase + Program funktioniert nicht nacheinader


von Karin (Gast)


Lesenswert?

Hallo :)
Ich versuche während der Laufzeit Daten in den Flash (STM32F303K8) zu 
schreiben. Dabei stieß ich auf verschiedene Probleme:
1
void put_in_Flash(uint32_t data)
2
{  
3
  const uint32_t pageAddress = 0x800F800;
4
  HAL_FLASH_Unlock();
5
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_SR_PGERR );
6
  FLASH_PageErase(pageAddress);
7
  HAL_Delay(5000);
8
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_SR_PGERR );
9
  HAL_FLASH_Program(TYPEPROGRAM_WORD, pageAddress, (uint64_t)data);
10
  HAL_FLASH_Lock();
11
}

Ich rufe mit set_in_Flash(0xAAAA); auf.

Nun zu meinem Problem: Wenn ich den Code so wie er ist ausführe, dann 
wird lediglich die Page gelöscht, aber nicht beschrieben. Wenn ich die 
Zeile zum Löschen jeodch auskommentiere, schreibt er meine Werte. Daher 
denke ich, dass etwas im Ablauf nicht ganz passt. Kann mir jemand hier 
einen Tipp geben, was noch fehlt?

Daneben habe ich noch eine Frage: Müssen immer 64bit beschrieben werden? 
Bzw ein Vielfaches davon? Und ist es diese Passage im Manual, die das 
aussagt:
1
Memory organization: 16 Kbit x 64 bits in STM32F303x6/8 and STM32F328x8 devices

von Alex (Gast)


Lesenswert?

Moin,
Du solltest wahrscheinlich besser die Flags abwarten:
https://community.st.com/s/question/0D50X0000ASrjgjSQB/halflashprogram-returns-halok-but-does-not-appear-to-write-the-flash

schönen Gruß,
Alex

von Bauform B. (bauformb)


Lesenswert?

Karin schrieb:
> Müssen immer 64bit beschrieben werden?
> Bzw ein Vielfaches davon? Und ist es diese Passage im Manual, die das
> aussagt:
> Memory organization: 16 Kbit x 64 bits in STM32F303x6/8 and STM32F328x8
> devices

Nein, der Datenbus zum Flash ist 64 Bit breit, man kann 64 Bit parallel 
lesen, aber schreiben muss man 16 Bit, nicht mehr und nicht weniger. Die 
Feinheiten sind im RM0316 unter - Flash program and erase operations - 
Main Flash memory programming - beschrieben.

Vorsicht: Die Flash-Programmierung funktioniert bei allen STM32 sehr 
unterschiedlich. Der F205 ist z.B. 128 Bit breit und man darf 8, 16, 32 
oder 64 Bit am Stück schreiben. Der L552 ist umschaltbar 64 oder 128 Bit 
breit und muss immer mit 64 Bit geschrieben werden, weil daraus 8 
ECC-Bits berechnet werden. Und so weiter...

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.