Speicher für Benutzerdaten in Flash zuweisen (STM32F4 HAL)

8

Ich versuche, den internen Flash eines STM32F405 zu verwenden, um eine Menge benutzerdefinierbarer Bytes zu speichern, die nach dem Neustart erhalten bleiben.

Ich benutze:

uint8_t userConfig[64] __attribute__((at(0x0800C000)));

um Speicher für die Daten zu reservieren, die ich speichern möchte.

Wenn das Programm startet, überprüfe ich, ob das erste Byte auf 0x42 gesetzt ist, wenn nicht, setze ich es mit:

HAL_FLASH_Unlock(); HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42); HAL_FLASH_Lock();

Danach überprüfe ich den Wert in userConfig[0] und ich sehe 0x42 ... Großartig!

Wenn ich jedoch auf "Reset" klicke und den Standort erneut betrachte, ist es nicht 0x42 mehr ...

Irgendeine Idee, wo ich falsch liege? Ich habe es auch versucht:

#pragma location = 0x0800C00 volatile const uint8_t userConfig[64]

aber ich bekomme das gleiche Ergebnis ..

    
HammerFet 13.02.2015, 16:09
quelle

1 Antwort

14

Okay, ich habe eine Antwort auf die ST-Foren dank clive1 . Dieses Beispiel funktioniert für ein STM32F405xG.

Zuerst müssen wir das Speicherlayout in der Linker-Skriptdatei (.ld-Datei)

ändern

Ändern Sie den vorhandenen FLASH und fügen Sie eine neue Zeile für DATA hinzu. Hier habe ich alle section 11 zugewiesen.

%Vor%

Handbuch zum Bearbeiten von Linker-Dateien auf der Sourceware-Website

In der gleichen Datei müssen wir hinzufügen:

%Vor%

Dies erzeugt eine section namens .user_data , die wir im Programmcode adressieren können.

Fügen Sie abschließend in Ihrer .c-Datei Folgendes hinzu:

%Vor%

Dies gibt an, dass wir die Variable userConfig im Abschnitt .user_data speichern und const sicherstellen, dass die Adresse von userConfig unverändert bleibt.

Um nun während der Laufzeit in diesen Flash-Bereich zu schreiben, können Sie den stm32f4 stdlib oder HAL Flash-Treiber verwenden.

Bevor Sie in den Flash schreiben können, muss er gelöscht werden (alle Bytes sind auf 0xFF gesetzt). Die Anweisungen für die HAL-Bibliothek sagen aus irgendeinem Grund nichts darüber aus ...

%Vor%     
HammerFet 13.02.2015, 17:27
quelle