一.FLASH简介
1.FLASH包含程序存储器,系统存储器,选项字节三个部分。通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编写。
2.读写FLASH的用途:
利用程序存储器的剩余空间来保存掉电不丢失的用户数据
通过在程序中编程(IAP),实现程序的自我更新(类似手机OTA升级)
3.在线编程(ICP)用于更新程序存储器的全部内容,它通过JTAG(仿真器,比如用stlink),SWD协议或系统加载程序(bootloader)下载程序
4.在程序中编程(IAP)可以使用微控制器支持的任一种通信接口下载程序
二.FLASH基本结构图
三.FLASH解锁
1.FPEC共有三个键值:
RDPRT=0x000000A5(解除读保护)
KEY1=0x45670123
KEY2=0xCDEF89AB
2.解锁:
复位后,FPEC被写保护,不能写入FLASH_CR
在FLASH_KEYR先写入KEY1,再写入KEY2,解锁
错误的操作序列会在下次复位前锁死FPEC和FLASH_CR
3.加锁:
设置FLASH_CR的LOCK位锁住FPEC和FLASH_CR
四.使用指针访问存储器
1.使用指针读指定地址下的存储器:
uint16_t Data=*((IO uint16_t *)(0x08000000))
2.使用指针写指定地址下的存储器:
*((IO uint16_t *)(0x08000000))=0x1234
3.其中_IO 对应 volatile
五.程序存储器全擦除
六.选项字节
RDP:写入RDPRT键(0x000000A5)后解除读保护
USER:配置硬件看门狗和进入停机/待机模式是否产生复位
Data0/1:用户可以自定义使用
WRP0/1/2/3:配置写保护,每一个位对应4个存储页(中容量)