本内容基于江协科技STM32视频学习之后整理而得。
文章目录
1. FLASH
1.1 简介
- STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程。(系统存储器是原厂写入的Bootloader程序,不允许我们修改的,)
- 读写FLASH的用途:
- 利用程序存储器的剩余空间来保存掉电不丢失的用户数据
- 通过在程序中编程(IAP),实现程序的自我更新
- 在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序
- 在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序
类型 | 起始地址 | 存储器 | 用途 |
---|---|---|---|
ROM | 0x0800 0000 | 程序存储器Flash | 存储C语言编译后的程序代码和常量· |
0x1FFF F000 | 系统存储器 | 存储BootLoader,用于串口下载 | |
0x1FFF F800 | 选项字节 | 存储一些独立于程序代码的配置参数 | |
RAM | 0x2000 0000 | 运行内存SRAM | 存储运行过程中的临时变量 |
0x4000 0000 | 外设寄存器 | 存储各个外设的配置参数 | |
0xE000 0000 | 内核外设寄存器 | 存储内核各个外设的配置参数 |
1.2 闪存模块组织
- 闪存存储器接口寄存器并不属于闪存,就是一个普通的外设,存储介质也都是RAM。闪存存储器接口寄存器是上面的(主存储器和信息块)的管理员,擦除和编程就是通过读写这些寄存器完成的。
- 主存储器和信息块是真正的闪存。主存储器就是程序存储器,启动程序代码就是系统存储器。用户选择字节就是选项字节,系统存储器和选项字节又可合称为信息块。
- 擦除和写保护都是以页为单位的。
- 写入前必须擦除,擦除必须以最小单位进行,擦除后数据位全变为1,数据只能1写0,不能0写1。擦除和写入之后都需要等待忙。
- 地址只要以000、400、800、C00结尾的,都一定是页的起始地址。
- 系统存储器容量是2K。
- 选项字节容量是16K。
1.3 FLASH基本结构
选项字节里面有很大一部分配置位,其实是配置主程序存储器的读写保护的。
1.4 FLASH解锁
-
FPEC(闪存编程和擦除控制器)共有三个键值:
RDPRT键 = 0x000000A5(解除读保护的密钥)
KEY1 = 0x45670123
KEY2 = 0xCDEF89AB -
解锁:
复位后,FPEC被保护,不能写入FLASH_CR
在FLASH_KEYR先写入KEY1,再写入KEY2,解锁
错误的操作序列会在下次复位前锁死FPEC和FLASH_CR -
加锁:
设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR