stm32f407vgt6 flash
时间: 2025-01-23 21:25:47 浏览: 27
STM32F407VGT6 Flash 编程与配置
1. 片上Flash特性概述
STM32F4系列微控制器内置高速嵌入式存储器,其中包括高达1MB的闪存。对于特定型号如STM32F407VGT6而言,其具备512KB FLASH容量以及额外的功能支持,例如ECC错误校验机制来提高数据可靠性[^2]。
2. Flash编程流程
为了执行对STM32F407VGT6内部FLASH的操作,通常会遵循如下过程:
初始化: 配置必要的硬件资源并启动HAL库或其他底层驱动程序。
解锁FLASH访问权限: 使用
__HAL_FLASH_CLEAR_FLAG()
清除可能存在的标志位;调用HAL_FLASH_Unlock()
函数解除写保护状态以便后续修改操作能够顺利进行。擦除指定区域: 调用
HAL_FLASHEx_Erase()
, 定义要被清零的目标地址范围及其页数大小。编写新数据到目标位置: 利用循环结构配合
HAL_FLASH_Program()
逐字节填充所需内容至设定好的起始偏移量处。锁定以防止意外更改: 当完成所有预期的数据更新动作之后, 应立即通过
HAL_FLASH_Lock();
重新激活安全锁闭模式从而保障现有资料不被非法篡改。
下面给出一段简单的代码片段用于展示如何向STM32F407VGT6的flash中写入单个字符'A':
#include "stm32f4xx_hal.h"
void ProgramCharToFlash(uint32_t address){
uint8_t data = 'A';
/* Unlock the Flash to enable the flash control register access */
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR |
FLASH_FLAG_WRPERR| FLASH_FLAG_PGAERR|
FLASH_FLAG_PGPERR| FLASH_FLAG_PGSERR);
// Erase Page before writing new value.
FLASH_EraseInitTypeDef eraseInitStruct;
eraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
eraseInitStruct.PageAddress = address & ~(FLASH_PAGE_SIZE - 1);
eraseInitStruct.NbPages = 1;
if(HAL_OK != HAL_FLASHEx_Erase(&eraseInitStruct,NULL)){
Error_Handler();
}
// Write Data into specified Address Location within Flash Memory Space.
if (HAL_OK != HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE,address,data)) {
Error_Handler();
}
/* Lock the Flash to disable the flash control register access */
HAL_FLASH_Lock();
}
3. 选项字节管理
除了基本的读取、擦除和编程功能外,STM32还提供了专门针对特殊用途而设计的一些参数——即所谓的“选项字节”。这些设置可以用来定义用户密码、独立看门狗超时周期或是调整BOR复位阈值电压等重要属性。可以通过专用API接口来进行相应的查询(HAL_GetREVID()
) 或者重设 (HAL_FLASH_OB_Unlock()/HAL_FLASH_OB_Launch()
) 操作。
相关推荐


















