一、STM32F103的FLASH简介
1、如图所示,STM32F103内部FLASH存储区分为三个区域:主存储区、信信息块和闪存存储器接口寄存器。
储存储区是我们读写FLASH的主要的存储区,MCU程序以及一些需要掉电保存的数据都是存储在这个区域的。
信息快:程序启动代码被存储在这部分。
最后的寄存器则是FLASH读写需要配置的一些寄存器位置。
主存储器的起始位置0x08000000,除去程序占用的空间,剩余部分就可以作为数据保存的区域了,所以在利用内部FLASH存储数据的时候,一定不要占用程序本身所占用的空间,否则会导致死机。
主存储器一共256页,每页2K字节长度。
二、FLASH存储寄存器的配置
1、FPEC键寄存器:
在读写FLASH之前必须进行解锁FPEC,通过该寄存器,向该寄存器写入键值。当要操作FLASH时,需要将相应键值KEY1和KEY2写入寄存器中,同理,操作完成后,还要锁定该FLASH。
2、控制寄存器FLASH_CR
LOCK位:解锁或锁住位,解锁后该位清零,写1可锁住。
STRT位:该位写1,进行一次擦除。
PER位:该位写1,进行页擦除
PG位:读写选择位,写数据时该位需要置1,读数据则该位为0.
3、状态寄存器FLASH_SR
第5位EOP位:操作结束标志
第4位WRPRTERR位:写保护错误
第3位:保留
第2位:PGERR:编程错误
第1位BSY位:当FLASH正在被操作时,该位置1,当操作完成或发生错误时,清零。
4、地址寄存器FLASH_AR
选择要操作的FLASH地址,当BSY位为1时,即FLASH正在被操作,则该寄存器不能进行操作。
三、FLASH读写操作流程/1、STM32复位后,FPEC模块是被保护的,不能去操作各个寄存器,因此需要先解锁,向模块中写入
特定的序列到FLASH_KEYR寄存器,才能打开FPEC模块。如图所示。