STM32F103内部FLASH数据存储实战:从地址映射到扇区操作

stm32f103使用PVD监测掉电、flash擦写与读取 STM32 PVD功能具体可以检测到上电、掉电瞬间,其处理方式有中断响应及事件响应。 其配置过程有三个步骤:1.开启PVD中断并设置其优先级; 2.配置响应中断或事件的阈值电压; 3.配置响应模式。 阅读详情

1. STM32F103内部FLASH基础认知

大家好,我是张工,一个在嵌入式行业摸爬滚打十多年的老工程师。今天我想和大家聊聊STM32F103内部FLASH数据存储的那些事儿。很多初学者第一次接触内部FLASH存储时都会有点懵,其实只要掌握几个关键概念,你会发现它比外挂EEPROM简单多了。

STM32F103的内部FLASH就像是我们手机的内部存储空间,掉电后数据不会丢失,非常适合存储设备参数、校准数据、运行配置等信息。我做过不少项目,比如智能电表、工业控制器,都是直接用内部FLASH来存储关键参数的,省去了外置存储芯片的成本和布线麻烦。

这里有个重要概念需要理解:STM32F103的FLASH地址从0x08000000开始,这个地址是固定的。不同容量的芯片结束地址不同,比如64KB的C8T6结束于0x0800FFFF,而512KB的VET6结束于0x0807FFFF。你可以把这片FLASH空间想象成一栋大楼,每个地址对应一个房间,我们要做的就是往合适的房间里存放数据。

在实际项目中,我通常会把FLASH空间分成两个区域:程序区和数据区。程序区存放固件代码,数据区存放需要掉电保存的参数。为了避免误操作覆盖代码,一定要确保数据区位于程序区之后的安全位置。怎么确定程序用了多少空间呢?编译后查看生成的map文件就能找到答案。

2. 深入理解FLASH地址映射与扇区划分

2.1 地址映射原理

STM32F103的FLASH地址映射是个很有意思的设计。物理上FLASH是从0x08000000开始,但这个地址区域同时被映射到0x00000000。这种设计主要是为了支持不同的启动模式,当芯片设置为从主闪存启动时,0x00000000地址实际上访问的就是0x08000000开始的FLASH空间。

我在第一次接触这个特性时也迷糊过,后来想通了就好理解了。你可以把0x00000000想象成一个快捷方式,它指向的是0x08000000的实际内容。这种映射关系是由芯片的BOOT引脚配置决定的,一般情况下我们不需要特别关注,只需要记住操作FLASH时使用0x08000000开始的地址就对了。

2.2 扇区划分的奥秘

STM32F103的FLASH不是一整块均匀的空间,而是被划分成多个扇区。这里有个很重要的知识点:不同容量的芯片,扇区大小是不一样的!小容量产品(小于256KB)的扇区大小是1KB,而大容量产品(大于等于256KB)的扇区大小是2KB。

这个差异在实际开发中很容易踩坑。我曾经有个项目先用了STM32F103C8T6(64KB),后来升级到STM32F103VET6(512KB),就因为扇区大小不同导致数据存储出了问题。所以一定要根据芯片容量来定义扇区大小:

#define FLASH_SIZE 512  // 单位KB

#if FLASH_SIZE < 256
    #define SECTOR_SIZE 1024  // 1KB
#else
    #define SECTOR_SIZE 2048  // 2KB
#endif

扇区是擦除操作的最小单位,这意味着即使你只想修改一个字节,也必须把整个扇区擦除。这就像写字板,你想修改其中一个字,得先把整页擦干净再重新写。理解这一点对设计存储方案至关重要。

2.3 跨容量型号的兼容性设计

在实际产品开发中,我们经常需要为不同型号的芯片设计兼容的代码。比如同一个产品线,基础版用64KB的C8T6,高级版用512KB的VET6。这时候就需要做好FLASH存储的兼容性设计。

我的经验是采用抽象层设计,把FLASH操作封装成统一的接口,底层根据芯片容量自动适配。比如这样定义存储地址:

// 根据芯片容量确定数据存储起始地址
#if FLASH_SIZE == 64
    #define DATA_START_ADDR 0x0800F000  // 64KB芯片的最后4KB
#elif FLASH_SIZE == 512
    #define DATA_START_ADDR 0x0807F000  // 512KB芯片的最后4KB
#endif

这样设计的好处是上层应用不需要关心具体芯片型号,只需要调用统一的读写接口。我在多个项目中都采用这种方案,大大提高了代码的可移植性和可维护性。

3. FLASH读写操作实战详解

3.1 读操作:简单如读取变量

FLASH的读操作非常简单,因为

STM32F103-FLASH读写 【代码】STM32F103-FLASH读写。 阅读详情

相关推荐

STM32F103 FLASH 读写操作

FLASH读写函数,直接操作寄存器。

qq_36272499的博客 1662

STM32F103内部FLASH数据存储实战:从地址映射到扇区管理

本文详细介绍了STM32F103内部FLASH数据存储的实战方法,涵盖地址映射、扇区管理和读写操作。通过解析FLASH结构、提供完整的代码示例和优化策略,帮助开发者高效利用芯片内部存储空间,实现可靠的数据存储方案,适用于参数保存和设备配置等场景。

tgb3456789的博客 1089

STM32F429内部FLASH操作全解析:从原理到实战避坑指南

在嵌入式系统开发中,微控制器内部FLASH是存储程序代码和关键用户数据的核心非易失性存储器。其工作原理基于浮栅晶体管,通过电荷存储实现数据持久化,但操作上需遵循严格的擦除与编程时序。这项技术的核心价值在于提供零成本的片上存储方案,支持XIP执行,对成本敏感和实时性要求高的应用至关重要。典型应用场景包括固件存储、参数掉电保存、Bootloader以及轻量级数据日志。针对STM32F429,其内部FLASH架构包含多扇区划分、等待周期配置及ART加速器等关键机制。实践中常因**Flash Download Fa

weixin_29190651的博客 348

100 篇文章精通 STM32F103(第 15 篇):SPI Flash 应用 —— 大容量外部存储扩展实战

SPI Flash 是一种通过SPI 通信协议控制的非易失性存储芯片,相当于 STM32 的 “移动硬盘”,核心特点是 “大容量、小体积、低功耗、易扩展SPI Flash 芯片:像一个可外接的大型仓库,容量从 1MB 到 128MB 不等(远大于内部 Flash);存储单元划分:仓库按 “块(Block)→扇区(Sector)→页(Page)” 三级划分(类似硬盘的 “分区→文件夹→文件”),擦除需按块或扇区操作,写入按页操作;SPI 接口。

CGlgq123的博客 1103

STM32F103内部FLASH读写实战:扇区管理与断电安全存储

嵌入式系统中,非易失性存储是保障设备断电后参数、配置和日志持久化的基础能力。STM32F103内部FLASH虽无需外挂EEPROM,但其‘写前必擦除’‘最小擦除单位为扇区’‘仅支持1→0编程’等物理约束,使直接模拟EEPROM极易引发数据丢失、Flash变砖或写入静默失败。理解FLASH编程时序、解锁机制、BUSY轮询与地址对齐原理,是实现可靠存储的前提;而通过双缓冲页管理、CRC校验、磨损均衡和断电安全写入等工程策略,可将内部FLASH转化为高鲁棒性的嵌入式数据黑匣子。本文聚焦F103平台,提供可量产的F

weixin_33461476的博客 292

STM32F103内部Flash读写实战:参数掉电保存与扇区级操作指南

嵌入式系统中,非易失性存储是实现设备断电记忆、校准参数保存和固件升级的关键能力。STM32F103内置Flash作为片上资源,具备零BOM成本、无需外设驱动、高可靠性的技术优势,但其操作受扇区擦除、字对齐写入、等待周期配置等硬件约束。理解Flash编程原理(如EOP轮询、PGERR错误识别)和时序要求(如SystemInit必须前置),可规避擦除失败、写保护锁死、数据静默丢失等典型问题。本内容聚焦STM32F103内部Flash读写例子与标准外设库实践,覆盖地址映射、状态机式写入、结构体批量存储及工业级防呆

weixin_29164843的博客 62

STM32F103内部FLASH读写实战:参数存储与IAP升级

在嵌入式开发中,非易失性存储是保存关键数据的基础需求。FLASH存储器通过电荷存储实现掉电不丢失,其按页擦除、按半字编程的特性决定了操作方式。合理利用内部FLASH可降低BOM成本,但需注意擦写寿命和写均衡。典型应用包括参数存储、设备序列号和IAP升级。STM32F103内部FLASH读写涉及擦除、编程、读取及寿命管理,双页交替存储和IAP升级是工程实践中的核心环节。

weixin_29161785的博客 253

STM32F103C8T6内部Flash操作实践指南 - 基于HAL库

STM32F103C8T6微控制器是一款广泛应用于嵌入式系统的32位ARM Cortex-M3核心处理器,由意法半导体(STMicroelectronics)生产。这款控制器集成了丰富的外设接口和较高的处理能力,同时具有较佳的功耗表现,非常适合于要求性能与功耗平衡的应用场景,如工业控制、医疗设备、消费电子和物联网设备等。在理解任何微控制器的应用之前,深入了解其功能和特点至关重要。本章将带您一探STM32F103C8T6的核心特性,为后续章节的深入探讨打下基础。

weixin_29607511的博客 817

STM32F103内部FLASH模拟EEPROM实战方案

FLASH模拟EEPROM是嵌入式系统中实现掉电保存参数的关键技术,其本质是在受限擦写粒度(如STM32F103的1KB页)下,通过双页轮换、逻辑扇区管理与CRC校验等机制,规避频繁整页擦除导致的寿命衰减问题。该方案基于FLASH可编程、非易失、片上集成等特性,提供类EEPROM的字节级读写体验,显著降低BOM成本与硬件复杂度。适用于课程设计、毕业设计及工业小设备固件开发,尤其解决‘禁用外挂存储’场景下的参数持久化需求。文中实现支持10万次写入寿命、断电自愈恢复与4字节对齐地址管理,已通过72小时老化验证。

weixin_29168813的博客 121

STM32F103内部FLASH模拟EEPROM读写实战:掉电不丢参数

在嵌入式系统开发中,非易失性存储是保存关键参数的基础需求。FLASH存储器通过电荷存储原理实现数据持久化,但STM32F103内部FLASH具有按页擦除、按半字写入的特性,需模拟EEPROM的读写机制。这种技术方案能显著降低BOM成本,避免外挂存储芯片,广泛应用于工业采集板、数据记录仪等场景。针对STM32 F103 FLASH EEPROM读写,本文深入讲解地址映射、解锁擦除、数据校验及双页备份等工程实践,帮助开发者实现可靠的掉电参数保存。

weixin_29190573的博客 236

STM32F103 内部 FLASH 读写实战:从原理到避坑

在嵌入式系统开发中,非易失性存储是保存关键参数的核心需求。FLASH 存储器基于浮栅 MOS 管结构,通过高压注入电荷实现数据写入,但擦除必须按页进行,且写入只能将位从 1 变为 0。这种物理特性决定了其“先擦后写”的操作原则。STM32F103 内部 FLASH 支持半字编程和页擦除,配合解锁寄存器机制,可安全实现参数存储、固件升级和日志记录。相比外挂 EEPROM,它节省了芯片和走线,但擦写寿命有限,适合低频写入场景。掌握其读写时序和避坑技巧,能显著提升系统可靠性。

weixin_29165725的博客 229

STM32F103内部FLASH模拟EEPROM:掉电保存参数实战

在嵌入式系统开发中,掉电保存参数是常见需求,通常使用EEPROM实现。STM32F103微控制器内部集成FLASH存储器,通过模拟EEPROM的读写行为,可以省去外部存储芯片,降低BOM成本和PCB复杂度。其原理基于FLASH的页擦除和半字写入特性,配合解锁、擦除、编程等寄存器操作,实现数据的可靠存储。技术价值在于简化硬件设计、提高系统集成度,适用于小成本工控板、数据采集终端等场景。针对STM32F103内部FLASH,通过页管理、CRC校验和双页交替策略,可有效提升掉电保护能力和擦写寿命,满足参数存储的工

weixin_29164185的博客 234

STM32F103内部Flash安全读写实战指南

嵌入式系统中,MCU内部Flash不仅是程序存储区,更是关键配置、设备ID和校准参数的持久化载体。其本质是基于浮栅晶体管的非易失性存储器,写入前必须整页擦除(因仅支持0→1翻转),且依赖严格的时序控制、状态轮询与写后校验。技术价值在于省去外挂EEPROM的成本与PCB面积,但需直面RDP读保护、电压波动导致校验失败、中断禁用引发看门狗复位等工程风险。典型应用场景包括工业仪表参数存储、传感器节点固件升级配置迁移、低功耗设备断电不丢数等。本文以STM32F103为例,深入解析Flash页管理、地址映射、TLV格

weixin_29188043的博客 223

STM32F103内部Flash读写实战:掉电保存与参数存储完整方案

嵌入式系统中,数据持久化是设备可靠运行的基础。Flash存储器凭借掉电不丢失、读取速度快等优势,成为参数保存和固件升级的核心载体。STM32F103内部Flash读写是嵌入式开发中的高频技能,常用于设备参数存储、校准值记录和OTA升级标记等场景。掌握其工作原理,需要理解先擦后写、按页操作以及半字编程等硬件特性。本文围绕一个可直接落地的例程,系统拆解Flash读、写、擦除的寄存器操作流程,并深入分析地址规划、读写保护、掉电可靠性等工程痛点。通过合理的分区设计与磨损均衡策略,可显著延长Flash使用寿命,并为B

weixin_29195217的博客 243

奇安信 2025 年护网蓝队初选笔试题(附答案解析)

熬夜为大家整理了 奇安信 2025 年护网蓝队初选笔试题,(关注我我会持续更新)涵盖 SQL 注入、Web 安全、渗透测试、二进制安全 等核心知识点,并附上详细答案解析,助力大家高效备考!12.下列关于虚表指针描述正确的是(1.5分)✅ B. 虚表指针存储的是虚表的首地址❌ A. 任何类对象都存在虚表指针(仅含虚函数的类有)❌ C. 虚表指针位于对象内存空间的起始处(由编译器决定)❌ D. 虚表指针是否存在不影响对象所占内存空间的大小(存在时会增加指针大小)📌 解析:虚表指针(vptr)用于实现多态,指向

Aishenyanying33的博客 4699

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 423

HDRnet——双边滤波和仿射变换的摇身一变

layer层数越多,下采样得到的图越小,low-level features的好处是最后的grid会更coarser,最后的特征图的感受野也越多,非线性更好,表达力更强。所以最终grid是5维的[B,in*out,n,H,W],permute之后是[B,H,W,n,in*out],B是batchsize,n表示对guide的量化级数,in*out表示每个cell的变换系数。这部分的处理对象是低分辨率图,利用CNN进行特征提取(局部和全局),最后fuse得到grid,这里面包含了变换的系数。

zcg1942的博客 1578

《基于Yolo算法的火灾检测系统设计与实现》开题报告

在消防安全领域,火灾对生命财产安全构成严重威胁。传统的火灾检测手段存在诸多不足,如误报率高、检测范围有限、响应速度慢等。基于 Yolo 算法的火灾检测系统能够利用深度学习技术,实现对火灾的高效、精准检测,具有重要的现实意义。         从社会安全角度看,该系统可以广泛应用于各类公共场所、工业厂房和居民住宅,实时监测火灾隐患,及时发出警报,为人员疏散和消防救援争取宝贵时间,有效降低火灾造成的人员伤亡和财产损失,保障社会公共安全。

m0_69704149的博客 1384

jenkins安装、打包、部署

一个可以让小白部署发布项目的软件;git 配置 一定要配置git的命令路径jenkins启动命令,一定要加这一段 -Dhudson.util.ProcessTree.disable=true一定要配置jenkins的节点,BUILD_ID和DONTKILLME 否则会导致打包后,会将运行的java程序进程也杀死创建任务SSH中执行服务器B的命令的时候,cd /opt;一定要cd 打开那个目录,否则文件无法传输过去。

学海无涯,我用JAVA 5219

NVIDIA - 人形机器人扼要

人形机器人是仿照人类外形设计的通用双足机器人,旨在与人类并肩工作,提高生产效率。它们能够学习和执行各种任务,如抓取物体、移动集装箱、装卸箱子等。

机器人控制与仿真应用 1291

Ros入门 (十)----激光雷达避障 简易实现

本篇文章通过订阅/scan话题获取障碍物的距离信息,达到避障目的,提供部分代码,仅供参考。

weixin_51157015的博客 1万+

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 512

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: RT-Thread 开发实战避坑指南
下一篇: 利用Chrome DevTools Memory面板精准定位前端内存泄漏
github5actions
博客等级 码龄1天 0粉丝 1824原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值