STM32 的内部 Flash 是一种非易失性存储器,可以用来存储程序代码、配置数据和日志记录。以下内容涵盖 Flash 存储的基本操作(擦除、写入、读取)和在 Flash 中保存数据的实现方法。
1. Flash 存储概述
1.1 Flash 特性
分块存储:STM32 的 Flash 被划分为多个页(Page)或扇区(Sector)。
擦除机制:Flash 必须按页或扇区擦除,不能逐字节擦除。
写入限制:在擦除之前不能直接覆盖写入,只能将 1 改为 0。
1.2 操作流程
解锁 Flash:解除写保护。
擦除页/扇区:准备写入数据。
写入数据:按字(32 位)或双字(64 位)写入。
读取数据:按地址读取。
2. Flash 操作实现
2.1 Flash 擦除
擦除规则
擦除按页或扇区进行,具体大小根据芯片系列不同而变化。
STM32 HAL 提供统一的擦除接口。
代码示例:擦除扇区
使用 HAL 库擦除 Flash:
c
复制代码
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PageError;
// 配置擦除参数
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; // 页擦除
EraseInitStruct.PageAddress = FLASH_USER_START_ADDR; // 用户区起始地址
EraseInitStruct.NbPages = 1; // 擦除 1 页
// 解锁 Flash
HAL_FLASH_Unlock();
// 擦除 Flash
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
// 擦除失败,处理错误
}
// 锁定 Flash
HAL_FLASH_Lock();
|