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
|