Flash 存储的操作通常包括读取、写入和擦除。在 STM32 中,操作 Flash 存储需要通过专门的库函数,如 STM32 HAL 库提供的 HAL_FLASH_Program 和 HAL_FLASH_Erase 函数。
代码示例:Flash 写入操作
c
复制代码
#include "stm32f0xx_hal.h"
#define FLASH_USER_START_ADDR 0x0801F800 // 用户数据存储起始地址
#define FLASH_USER_END_ADDR 0x08020000 // 用户数据存储结束地址
// 写入 1 字节数据到指定地址
HAL_StatusTypeDef Flash_Write(uint32_t Address, uint8_t data) {
HAL_FLASH_Unlock(); // 解锁 Flash 写入
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, data) == HAL_OK) {
HAL_FLASH_Lock(); // 写入完成后锁定 Flash
return HAL_OK;
}
HAL_FLASH_Lock();
return HAL_ERROR;
}
// 擦除 Flash 页面(1KB)
HAL_StatusTypeDef Flash_Erase(uint32_t startAddress) {
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PageError;
HAL_FLASH_Unlock();
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = startAddress;
EraseInitStruct.NbPages = 1; // 擦除1页(1KB)
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
HAL_FLASH_Lock();
return HAL_ERROR;
}
HAL_FLASH_Lock();
return HAL_OK;
}
|