STM32 Flash-geheugenschrijfhandleiding met behulp van HAL
Als u ervoor hebt gekozen om het STM32-flashgeheugen te gebruiken met de Hardware Abstraction Layer (HAL), dan biedt deze gids u de essentiële stappen die u nodig hebt voor eenvoudige microcontrollerprogrammering. Het instellen van de Hardware Abstraction Layer (HAL) is vrij beheersbaar wanneer u de onderstaande voorbeelden volgt.
Hoe kan ik met HAL naar STM32-flashgeheugen schrijven?
1. Maak het flashgeheugen gereed voor schrijven
- Voeg de nodige headerbestanden toe : Gebruik
#include "stm32f4xx_hal.h"
. - Ontgrendel het flashgeheugen : Voordat u gaat schrijven, moet u het flashgeheugen ontgrendelen door het volgende uit te voeren:
HAL_FLASH_Unlock();
. - Wis het flashgeheugen : Om gegevens te schrijven, wist u de specifieke flashgeheugensector die u wilt gebruiken. Dit wordt bereikt met de HAL_FLASHEx_Erase -functie:
-
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. Gegevens naar flashgeheugen schrijven
- Gebruik de HAL_FLASH_Program-functie om gegevens in het flashgeheugen in te voeren. Gegevens kunnen in verschillende vormen worden geschreven: bytes, halve woorden, woorden of dubbele woorden.
-
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 }
-
- Vergrendel het flashgeheugen opnieuw : Nadat het schrijven van de gegevens is voltooid, is het essentieel om het flashgeheugen opnieuw te vergrendelen om onbedoelde overschrijvingen te voorkomen:
HAL_FLASH_Lock();
.
Voorbeeldcode voor STM32-flashgeheugen met HAL
Hieronder vindt u een uitgebreid voorbeeld waarin alle procedures zijn samengevoegd:
#include "stm32f4xx_hal.h"
void Write_Flash(uint32_t Adres, uint32_t Gegevens) {
// Ontgrendel de Flash
HAL_FLASH_Unlock();
// Wis de Flash-sector
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) {
// Verwerk de fout
}
// Programmeer het Flash-geheugen
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Verwerk de fout
}
// Vergrendel de Flash
HAL_FLASH_Lock();
}
int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Hoofdlus
}
}
Deze illustratie biedt een complete demonstratie van het ontgrendelen, wissen, schrijven naar en vervolgens vergrendelen van het flashgeheugen van een STM32-microcontroller met HAL-functionaliteiten. Wij vertrouwen erop dat deze handleiding nuttig is geweest voor uw STM32-flashgeheugenprogrammering.
Mocht u problemen ondervinden, raadpleeg dan onze tutorial over het oplossen van de fout HAL INITIALIZATION FAILED.
Als u vragen of feedback heeft, kunt u hieronder een reactie achterlaten.
Geef een reactie