FLASH
- STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
- 读写FLASH的用途:
- 利用程序存储器的剩余空间来保存掉电不丢失的用户数据
- 通过在程序中编程(IAP),实现程序的自我更新
- 在线编程(In-Circuit Programming - ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序
- 在程序中编程(In-Application Programming - IAP) 可以使用微控制器支持的任一种通信接口下载程序
闪存模块


操作参数
- FPEC共有三个键值:
- RDPRT键=0x000000A5
- KEY1= 0x45670123
- KEY2 = 0xCDEF89AB
- 解锁:
- 复位后,FPEC被保护,不能写入FLASH CR
- 在FLASH_KEYR先写入KEY1,再写入KEY2,解锁
- 错误的操作序列会在下次复位前锁死FPEC和FLASH_CR
- 加锁:
- 设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR

执行逻辑



- 在写入前会检测是否擦除,必须擦除才能写入除非写入全为0
选项字节

- 写入一个存储器时要在对应的n存储器写入反码,只有对应才算写入真确执行操作
- RDP:写入RDPRT键(0x000000A5) 后解除读保护
- USER:配置硬件看门狗和进入停机/待机模式是否产生复位
- Data0/1:用户可自定义使用
- WRPO/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量)
选项字节擦除
检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作
解锁FLASH_CR的OPTWRE位
设置FLASH CR的OPTER位为1
设置FLASH CR的STRT位为1
等待BSY位变为0
读出被擦除的选择字节并做验证
选项字节写入检查FLASH SR的BSY位,以确认没有其他正在进行的编程操作
解锁FLASH CR的OPTWRE位
设置FLASH CR的OPTPG位为1
写入要编程的半字到指定的地址
等待BSY位变为0
读出写入的地址并验证数据
电子签名
