Guía de escritura de memoria flash STM32 con HAL
Si ha optado por utilizar la memoria flash STM32 con la capa de abstracción de hardware (HAL), esta guía le proporcionará los pasos esenciales que necesita para programar un microcontrolador de forma sencilla. La configuración de la capa de abstracción de hardware (HAL) es bastante sencilla si sigue los ejemplos que se describen a continuación.
¿Cómo puedo escribir en la memoria flash STM32 con HAL?
1. Prepare la memoria flash para escribir
- Incorpore los archivos de encabezado necesarios : utilice
#include "stm32f4xx_hal.h"
. - Desbloquear la memoria flash : debe desbloquear la memoria flash antes de escribir, ejecutando:
HAL_FLASH_Unlock();
. - Borrar la memoria flash : para escribir datos, borre el sector específico de la memoria flash que desea utilizar. Esto se logra con la función
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. Escritura de datos en la memoria flash
- Utilice la función HAL_FLASH_Program para introducir datos en la memoria flash. Los datos se pueden escribir en varios formatos: bytes, medias palabras, palabras o palabras dobles.
-
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 }
-
- Volver a bloquear la memoria flash : después de completar la escritura de datos, es esencial bloquear nuevamente la memoria flash para evitar sobrescrituras no deseadas:
HAL_FLASH_Lock();
.
Código de ejemplo para memoria flash STM32 con HAL
A continuación se muestra un ejemplo completo que fusiona todos los procedimientos:
#include "stm32f4xx_hal.h"
void Write_Flash(uint32_t Dirección, uint32_t Datos) {
// Desbloquear la Flash
HAL_FLASH_Unlock();
// Borrar el sector 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;
si (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError)! = HAL_OK) {
// Manejar el error
}
// Programa la memoria Flash
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Manejar el error
}
// Bloquear el Flash
HAL_FLASH_Lock();
}
int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Bucle principal
}
}
Esta ilustración ofrece una demostración completa de cómo desbloquear, borrar, escribir y, posteriormente, bloquear la memoria flash de un microcontrolador STM32 con funcionalidades HAL. Confiamos en que esta guía le haya resultado útil para la programación de la memoria flash STM32.
Si encuentra algún desafío, consulte nuestro tutorial sobre cómo resolver el error HAL INITIALIZATION FAILED.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario a continuación.
Deja una respuesta