stm32f407读写flash hal库
时间: 2025-01-14 12:01:18 浏览: 53
STM32F407 使用 HAL 库实现 Flash 读写
初始化配置
为了使用HAL库进行Flash的操作,首先需要初始化必要的外设并设置好相应的参数。这通常通过STM32CubeMX工具完成,在项目创建阶段选择合适的MCU型号以及所需的中间件版本。
函数说明
对于Flash的编程操作主要包括以下几个方面:
解锁: 在执行任何修改之前必须先调用
HAL_FLASH_Unlock()
来解除保护机制。擦除页/扇区: 可以利用
HAL_FLASHEx_Erase()
函数指定要清除的具体位置及其大小范围。数据写入: 利用
HAL_FLASH_Program()
可以向特定地址写入字节(Byte), 半字(Half Word),全字(Word)等不同长度的数据单元。锁定: 完成所有更改之后应当再次调用
HAL_FLASH_Lock();
确保安全性和稳定性[^4]。
下面是具体的代码实例展示如何在STM32F407上运用HAL库来进行简单的Flash读取和写入过程:
#include "stm32f4xx_hal.h"
// 假定已经完成了基本的系统初始化工作...
void Flash_Write(uint32_t Address, uint32_t Data){
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PageError = 0;
/* Unlock the Flash to enable the flash control register access */
HAL_FLASH_Unlock();
/* Fill EraseInit structure*/
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = Address & (uint32_t)(~(FLASH_PAGE_SIZE - 1));
EraseInitStruct.NbPages = 1;
if (HAL_OK != HAL_FLASHEx_Erase(&EraseInitStruct, &PageError)){
// Handle error...
}
/* Program the user Flash area word by word */
if (HAL_OK != HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)){
// Handle error...
}
/* Lock the Flash to disable the flash control register access */
HAL_FLASH_Lock();
}
uint32_t Flash_Read(uint32_t Address){
return (*(__IO uint32_t*)Address);
}
这段程序展示了怎样定义两个辅助性的功能——一个是用来往给定地址处存储一个四字节宽度数值;另一个则是从该地点获取相应的内容返回给调用者。需要注意的是实际应用中还需要加入错误处理逻辑以便更好地应对可能出现的各种异常状况。
阅读全文
相关推荐


















