STM32-Flash-Speicher-Schreibhandbuch mit HAL
Wenn Sie sich für die Verwendung des STM32-Flash-Speichers mit dem Hardware Abstraction Layer (HAL) entschieden haben, enthält diese Anleitung die wesentlichen Schritte, die Sie für eine unkomplizierte Mikrocontroller-Programmierung benötigen. Das Einrichten des Hardware Abstraction Layer (HAL) ist recht einfach, wenn Sie den unten aufgeführten Beispielen folgen.
Wie kann ich mit HAL in den STM32-Flash-Speicher schreiben?
1. Bereiten Sie den Flash-Speicher zum Schreiben vor
- Erforderliche Headerdateien einbinden : Verwenden Sie
#include "stm32f4xx_hal.h"
. - Entsperren Sie den Flash-Speicher : Sie müssen den Flash-Speicher vor dem Schreiben entsperren, indem Sie Folgendes ausführen:
HAL_FLASH_Unlock();
. - Löschen des Flash-Speichers : Um Daten zu schreiben, löschen Sie den Flash-Speichersektor, den Sie verwenden möchten. Dies wird mit der Funktion
HAL_FLASHEx_Erase erreicht:-
FLASH_EraseInitTypeDef EraseInitStruct; uint32_t SectorError; EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS; EraseInitStruct.Sector = FLASH_SECTOR_2; // Define the sector for erasure EraseInitStruct.NbSectors = 1; EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3; if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError)! = HAL_OK) { // Error handling }
-
2. Daten in den Flash-Speicher schreiben
- Verwenden Sie die Funktion HAL_FLASH_Program, um Daten in den Flash-Speicher einzugeben. Daten können in verschiedenen Formen geschrieben werden: Bytes, Halbwörter, Wörter oder Doppelwörter.
-
uint32_t Address = 0x08008000; // Initial address in flash memory uint32_t Data = 0x12345678; // Information to be saved if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) { // Handle the error }
-
- Sperren Sie den Flash-Speicher erneut : Nach Abschluss des Datenschreibvorgangs muss der Flash-Speicher unbedingt erneut gesperrt werden, um ein unbeabsichtigtes Überschreiben zu vermeiden:
HAL_FLASH_Lock();
.
Beispielcode für STM32-Flash-Speicher mit HAL
Nachfolgend finden Sie ein umfassendes Beispiel, in dem alle Verfahren zusammengefasst sind:
#include "stm32f4xx_hal.h"
void Write_Flash(uint32_t Address, uint32_t Data) {
// Flash entsperren
HAL_FLASH_Unlock();
// Den Flash-Sektor löschen
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t SectorError;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.Sector = FLASH_SECTOR_2;
EraseInitStruct.NbSectors = 1;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError)! = HAL_OK) {
// Fehler behandeln
}
// Flash-Speicher programmieren
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Fehler behandeln
}
// Flash sperren
HAL_FLASH_Lock();
}
int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Hauptschleife
}
}
Diese Abbildung zeigt ausführlich das Entsperren, Löschen, Beschreiben und anschließende Sperren des Flash-Speichers eines STM32-Mikrocontrollers mit HAL-Funktionen. Wir hoffen, dass Ihnen diese Anleitung bei der Programmierung Ihres STM32-Flash-Speichers geholfen hat.
Wenn Sie auf Probleme stoßen, lesen Sie bitte unser Tutorial zur Behebung des Fehlers „HAL-INITIALISIERUNG FEHLGESCHLAGEN“.
Wenn Sie Fragen oder Feedback haben, können Sie unten gerne einen Kommentar hinterlassen.
Schreibe einen Kommentar