Guida alla scrittura della memoria flash STM32 tramite HAL

Guida alla scrittura della memoria flash STM32 tramite HAL

Se hai scelto di utilizzare la memoria flash STM32 con l’Hardware Abstraction Layer (HAL), questa guida ti fornirà i passaggi essenziali necessari per una programmazione semplice del microcontrollore. L’impostazione dell’Hardware Abstraction Layer (HAL) è abbastanza gestibile se segui gli esempi descritti di seguito.

Come posso scrivere sulla memoria flash STM32 con HAL?

1. Preparare la memoria flash per la scrittura

  1. Incorporare i file di intestazione necessari : utilizzare #include "stm32f4xx_hal.h".
  2. Sbloccare la memoria flash : È necessario sbloccare la memoria flash prima di scrivere, eseguendo: HAL_FLASH_Unlock();.
  3. Cancella la memoria flash : per scrivere dati, cancella il settore specifico della memoria flash che intendi utilizzare. Questo si ottiene con la funzione
    HAL_FLASHEx_Erase :

    • 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. Scrittura dei dati nella memoria flash

  1. Utilizzare la funzione HAL_FLASH_Program per immettere dati nella memoria flash. I dati possono essere scritti in vari formati: byte, mezze parole, parole o doppie parole.
    • 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. Ribloccare la memoria flash : dopo aver completato la scrittura dei dati, è essenziale bloccare nuovamente la memoria flash per evitare sovrascritture indesiderate HAL_FLASH_Lock();.

Codice di esempio per la memoria flash STM32 con HAL

Di seguito è riportato un esempio completo che riunisce tutte le procedure:


#include "stm32f4xx_hal.h"

void Write_Flash(uint32_t Indirizzo, uint32_t Dati) {
// Sblocca il Flash
HAL_FLASH_Unlock();

// Cancella il settore Flash
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) {
// Gestisci l’errore
}

// Programma la memoria Flash
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Gestisci l’errore
}

// Blocca il Flash
HAL_FLASH_Lock();
}

int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Ciclo principale
}
}

Questa illustrazione fornisce una dimostrazione completa di come sbloccare, cancellare, scrivere e successivamente bloccare la memoria flash di un microcontrollore STM32 con funzionalità HAL. Confidiamo che questa guida sia stata utile per la programmazione della memoria flash STM32.

In caso di problemi, fare riferimento al nostro tutorial su come risolvere l’errore HAL INITIALIZATION FAILED.

Se avete domande o commenti, sentitevi liberi di lasciare un commento qui sotto.

Fonte e immagini

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *