STM32 Flash-geheugenschrijfhandleiding met behulp van HAL

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

  1. Voeg de nodige headerbestanden toe : Gebruik #include "stm32f4xx_hal.h".
  2. Ontgrendel het flashgeheugen : Voordat u gaat schrijven, moet u het flashgeheugen ontgrendelen door het volgende uit te voeren: HAL_FLASH_Unlock();.
  3. 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

  1. 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 }
  2. 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.

Bron & Afbeeldingen

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *