软件:STM32-F1系列-读取Flash(2026/7/14)

发布时间:2026/7/15 3:52:25
软件:STM32-F1系列-读取Flash(2026/7/14) 目录Flash介绍1Flash 是什么2Flash 的结构3CPU 怎么执行程序4为什么还需要 SRAM5flash的两个操作6擦除单位Page7flash 存储内容8flash 的几大应用① Bootloader② IAP(In-Application Programming)在应用编程③ EEPROM 模拟 (Emulated EEPROM)STM32f103flash资源1基本参数2Flash 的三大操作①. 读操作无门槛②.写操作需解锁③.擦除操作2种方式3编程/擦除流程标准库4几大应用5与BKP寄存器的区别Flash介绍1Flash 是什么Flash 可以说是 STM32 最重要的存储器之一。今天的 Flash就是 STM32 芯片里面那块掉电不会丢失数据的存储器。它负责保存用户程序main()、各种函数常量数据字库参数BootLoader固件CPU 上电后第一件事情就是去 Flash 读取程序然后开始执行。2Flash 的结构STM32 的 Flash 没有 Page、Sector 混着用。对于 F1 系列只有 Page页整个 Flash64KB Flash→64 页→每页 1KB地址变化起始地址为0x080000001KB为1024 Byte转为16进制0x400Page0为08000000→Page1为08000400直到0800FC00为最后一页3CPU 怎么执行程序很多人都会误解Flash 是不是把程序复制到 SRAM 再运行对于 STM32F103不是CPU 可以直接读取 Flash。4为什么还需要 SRAM因为Flash适合保存不适合频繁修改。SRAM适合频繁读写因此CPU是从 Flash 读取代码去 SRAM 修改变量。所以代码在 Flash。数据在 SRAM。这是最经典的结构。5flash的两个操作1读取CPU可以直接读取flash0x08000000→取指令→执行 。程序运行就是这样。2写入Flash不能像RAM一样随便修改写入前需要擦除以后才可以写入擦除指的是把该页内容全部写入16擦除单位PageSTM32F103最小擦除单位Page7flash 存储内容情况1程序代码情况2用户参数比如,系统配置类背光亮度等级用户偏好类语言选择中文/英文。运行统计类设备通电次数8flash 的几大应用① Bootloader本质一段上电后最先运行的代码负责“交接工作”。STM32 上电后根据 Boot 引脚BOOT0/BOOT1的状态决定从哪里启动。如果是从 Flash 启动它固定从0x08000000开始执行Bootloader 就放在0x08000000这里。Bootloader的任务1初始化最基本的硬件时钟、串口/USB/CAN。2判断是否需要升级程序比如检测按键、检测APP完整性、接收升级指令。3跳转到用户应用程序APP去执行。② IAP(In-Application Programming)在应用编程本质利用 Flash 的可擦写特性在运行代码的同时改写 Flash 里的其他代码。它与 Bootloader 的关系很多人混淆这两个概念。其实Bootloader​ 是载体那段代码。IAP​ 是功能通过串口/USB/无线等方式更新固件的功能。通常我们在 Bootloader 中实现 IAP 功能。流程如下设备上电进入 Bootloader。收到主机发来的新固件数据包Bin 文件。Bootloader 擦除 APP 所在扇区。Bootloader 将收到的数据写入 Flash 的 APP 区域。校验 CRC成功后跳转。为什么叫“在应用编程”因为你可以设计成即使进入了 APPAPP 也能接收到升级指令然后强制跳回 Bootloader让 Bootloader 重新覆盖 APP 区域。这就实现了“一边跑一边修”。防变砖机制双保险为了防止升级中途断电导致变砖高级一点的设计是预留两份 APP 空间A/B 区。当前跑 A 区收到升级包后写到 B 区。B 区校验通过后修改标志位下次重启跳转到 B 区。这样即使 B 区写坏了还能回到 A 区。③ EEPROM 模拟 (Emulated EEPROM)本质利用 Flash 的非易失性假装自己是 EEPROM。Flash 比 EEPROM 难用在于擦除单位大Flash 擦 1KBEEPROM 擦 1Byte。寿命短Flash 1万次EEPROM 100万次。STM32F103C8T6 没有​ EEPROM。但我们需要存参数如校准系数、配置这些参数不能存在 RAM掉电丢也不能每次都烧录太麻烦。ST 官方提供了 AN2594 应用笔记和对应的 EEPROM Emulation 库强烈建议直接用官方的不要自己造轮子里面的状态机很复杂。STM32f103flash资源1基本参数2Flash 的三大操作①. 读操作无门槛直接通过地址指针读取和读 SRAM 一样内建预取缓冲区可以加速指令读取②.写操作需解锁Flash 默认是锁住的防止误操作必须按顺序写入密钥才能解锁先写0x45670123再写0xCDEF89AB到FLASH_KEYR寄存器写操作必须按**半字16 bit**写入不能按字节写写入前目标地址必须是0xFFFF擦除后的状态③.擦除操作2种方式Flash 的物理特性只能把 1 变成 0不能把 0 变成 1要把 0 变回 1只能靠擦除擦除会将整页或整片变为全0xFFFF两种擦除模式页擦除擦除某一页1 KB对其他页无影响整片擦除擦除全部 64 KB包括你正在运行的程序慎用3编程/擦除流程标准库// 1. 解锁 Flash FLASH_Unlock(); // 2. 等待 Flash 空闲可选大多数函数内部已处理 // while(FLASH_GetFlagStatus(FLASH_FLAG_BSY) SET); // 3a. 页擦除 FLASH_ErasePage(0x0800_FC00); // 擦除最后一页第63页 // 3b. 或 整片擦除慎用会擦掉程序本身 // FLASH_EraseAllPages(); // 4. 编程写入半字单位 FLASH_ProgramHalfWord(0x0800_FC00, 0x1234); FLASH_ProgramHalfWord(0x0800_FC02, 0x5678); // 5. 上锁保护 FLASH_Lock(); // 6. 读取验证直接读地址就行 uint16_t data *(volatile uint16_t *)0x0800_FC00;4几大应用1.模拟 EEPROM— STM32F103C8T6 没有真正的 EEPROM但可以用最后几页 Flash 来存配置参数你的备份寄存器项目就是这个思路的入口2.IAP在线升级— 通过串口/CAN 接收新固件写入 Flash 的高地址区域然后跳转执行3.写保护— 通过FLASH_WRPR可以把某些页设为写保护防止误擦4.选项字节Option Bytes— 位于0x1FFFF800区域控制读保护、看门狗、复位等操作时需要额外解锁FLASH_OPTKEYR5与BKP寄存器的区别