推广 热搜:全国客服热线  全国统一服务热线  24小时服务热线  附近服务网点  全国报修  全国报修网点  24小时服务电话  家电上门服务  附近上门服务网点  故障原因分析及处理 

「STM32 Flash 操作全解析」擦除、写入、读取一网打尽!附完整源码刷爆头条

   更新时间: 2025-10-05 22:10  发布时间: 2小时前   3390
核心提示:在嵌入式开发中,MCU 内部的 Flash 常用于存储配置信息、日志数据或用于 OTA 升级。STM32F4 系列 MCU 提供了对 Flash 的灵活操作能力,包括按扇区擦除、字节或半字写入等。本文将围绕一段实际使用的 Flash 操作代码进行讲解,主要涉及 Flash 的擦除、写入与读取功能。STM32F4 MCU 的 Flash 存储器按照扇区(Sector)划分,每个扇区大小不一,例如在 STM32F407 中,前四个扇区大小为

在嵌入式开发中,MCU 内部的 Flash 常用于存储配置信息、日志数据或用于 OTA 升级。STM32F4 系列 MCU 提供了对 Flash 的灵活操作能力,包括按扇区擦除、字节或半字写入等。本文将围绕一段实际使用的 Flash 操作代码进行讲解,主要涉及 Flash 的擦除、写入与读取功能。

STM32F4 MCU 的 Flash 存储器按照扇区(Sector)划分,每个扇区大小不一,例如在 STM32F407 中,前四个扇区大小为 16KB,第五个为 64KB,之后为若干个 128KB 的大扇区。片上 Flash 支持:

扇区级擦除(Sector Erase)

多种对齐方式的编程(如 Byte、Halfword、Word、Double Word)

擦写需先解锁并清除相关标志位

操作前需解锁 Flash 控制器,完成后应及时锁定以防意外写入。

代码中的扇区映射表 secmap[] 采用结构体 secinfot 维护每个扇区的起始地址、大小及编号:

这是一个结构体类型,表示每个扇区的起始地址、扇区大小和扇区编号。接着通过一个常量数组 secmap[] 列出 Flash 不同扇区的信息:

该映射表根据 STM32F4 的 Flash 布局列出了常用的 8 个扇区。

函数 mcuflasherase() 实现对 Flash 指定地址范围的擦除。

addr: 要擦除的起始地址

size: 要擦除的范围(单位为字节)

函数先计算扇区数量:

然后依次遍历扇区,找出与 addr 和 size 匹配的扇区范围,并执行擦除:

在执行擦除之前必须解锁 Flash:

擦除完成后锁定 Flash:

最后返回 1 表示成功,返回 0 表示擦除失败。

写入函数为:

addr: 写入的起始地址

buf: 待写入的数据缓冲区

size: 写入数据的字节数

写入之前,同样要进行 Flash 解锁,并清除标志位:

然后进入一个循环,按字节或半字方式逐步写入 Flash:

写入完成后更新地址和缓冲区指针:

如果写入中某次操作返回错误,则提前跳出,最后执行锁定操作并返回是否写入成功:

读取函数的接口为:

该函数直接通过内存拷贝读取 Flash 数据:

其中 addr 是 Flash 的起始地址,buf 是目标缓存区,size 是读取字节数。由于 STM32 的 Flash 可以直接映射为内存读取,因此可以像访问普通内存一样操作。

本篇文章介绍了 STM32F4 MCU 内部 Flash 的基础操作实现,包括:

使用结构体映射 Flash 扇区信息

实现 Flash 擦除函数,通过匹配地址范围擦除对应扇区

实现 Flash 写入函数,按字节或半字逐步写入 Flash

实现 Flash 读取函数,通过 memcpy 方式直接读取 Flash 内容

以上代码适用于裸机开发,也可作为 STM32 Flash 操作的基础模板,配合上层协议或文件系统进行扩展应用,如参数存储、数据记录、Bootloader 固件升级等功能。



 

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯频道
推荐图文
推荐资讯频道
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020015483号-5