stm32Hal库擦除flash
时间: 2025-01-23 10:52:23 浏览: 76
### 如何使用 STM32 HAL 库擦除 Flash
为了实现对 STM32 的 Flash 进行擦除操作,可以利用 HAL 库中的 `HAL_FLASH_Unlock()` 和 `HAL_FLASH_Lock()` 函数来解锁和锁定 Flash 访问权限。具体来说,`HAL_FLASHEx_Erase()` 是用于执行实际擦除工作的函数。
下面是一个完整的示例代码,展示了如何通过 HAL 库擦除指定地址范围内的 Flash:
```c
#include "stm32f4xx_hal.h"
// 定义要擦除的扇区起始地址以及结束地址
#define START_ADDRESS ADDR_FLASH_PAGE_0 /* Start @ of page 0, 0x08000000 */
#define END_ADDRESS (ADDR_FLASH_PAGE_127 + FLASH_PAGE_SIZE - 1) /* End @ of last page */
void Erase_Flash(void){
uint32_t PageError;
// 解锁 Flash 编程控制寄存器访问权限
HAL_FLASH_Unlock();
// 填充 FLASH_EraseInitTypeDef 结构体成员变量
FLASH_EraseInitStruct.TypeErase = TYPEERASE_PAGES; // 设置擦除类型为页面擦除
FLASH_EraseInitStruct.PageAddress = START_ADDRESS; // 起始页地址
FLASH_EraseInitStruct.NbPages = ((END_ADDRESS - START_ADDRESS)/FLASH_PAGE_SIZE)+1 ; // 需要擦除的页数
// 执行擦除命令并等待完成
if(HAL_OK != HAL_FLASHEx_Erase(&FLASH_EraseInitStruct, &PageError)){
// 错误处理逻辑...
}
// 锁定 Flash 控制寄存器以防止意外写入/擦除
HAL_FLASH_Lock();
}
```
上述代码实现了从定义好的起始地址到终止地址之间的所有 Flash 页面的擦除工作[^1]。需要注意的是,在调用此函数之前应当确保已经正确配置了系统的时钟树,并初始化了必要的外设资源。
此外,当涉及到 Flash 操作时务必小心谨慎,因为一旦发生错误可能会导致程序无法启动等问题。因此建议开发者们在开发板上测试前做好充分准备,比如备份现有固件等措施[^3]。
阅读全文
相关推荐


















