Guia de gravação de memória flash STM32 usando HAL
Se você escolheu utilizar a memória flash STM32 com a Camada de Abstração de Hardware (HAL), este guia fornecerá as etapas essenciais necessárias para uma programação direta do microcontrolador. Configurar a Camada de Abstração de Hardware (HAL) é bem gerenciável ao seguir os exemplos descritos abaixo.
Como posso gravar na memória flash STM32 com HAL?
1. Prepare a memória flash para gravação
- Incorpore os arquivos de cabeçalho necessários : Use
#include "stm32f4xx_hal.h"
. - Desbloquear a memória flash : Você deve desbloquear a memória flash antes de escrever, executando:
HAL_FLASH_Unlock();
. - Apague a Memória Flash : Para gravar dados, apague o setor específico da memória flash que você pretende usar. Isso é feito com a função 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. Escrevendo dados na memória flash
- Utilize a função HAL_FLASH_Program para inserir dados na memória flash. Os dados podem ser escritos em várias formas: bytes, meias palavras, palavras ou palavras duplas.
-
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 }
-
- Bloqueie novamente a memória flash : Após concluir a gravação de dados, é essencial bloquear a memória flash novamente para evitar qualquer substituição não intencional:
HAL_FLASH_Lock();
.
Código de exemplo para memória flash STM32 com HAL
Abaixo está um exemplo abrangente que reúne todos os procedimentos:
#include "stm32f4xx_hal.h"
void Write_Flash(uint32_t Address, uint32_t Data) {
// Desbloqueia o Flash
HAL_FLASH_Unlock();
// Apaga o setor 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) {
// Lidar com o erro
}
// Programar a memória Flash
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Lidar com o erro
}
// Bloqueie o Flash
HAL_FLASH_Lock();
}
int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Loop principal
}
}
Esta ilustração fornece uma demonstração completa de desbloqueio, apagamento, gravação e subsequente bloqueio da memória flash de um microcontrolador STM32 com funcionalidades HAL. Acreditamos que este guia tenha sido benéfico para sua programação de memória flash STM32.
Se você encontrar algum desafio, consulte nosso tutorial sobre como resolver o erro HAL INITIALIZATION FAILED.
Caso você tenha alguma dúvida ou comentário, fique à vontade para deixar um comentário abaixo.
Deixe um comentário