00. 目录
文章目录
- 00. 目录
- 01. FLASH简介
- 02. 闪存模块组织
- 03. FLASH基本结构
- 04. FLASH解锁
- 05. 使用指针访问存储器
- 06. 程序存储器编程
- 07. 选项字节
- 08. 选项字节编程
- 09. 选项字节擦除
- 10. 器件电子签名
- 11. 附录
01. FLASH简介
-
STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
-
读写FLASH的用途:
利用程序存储器的剩余空间来保存掉电不丢失的用户数据
通过在程序中编程(IAP),实现程序的自我更新
-
在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序
-
在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序
STM32F10xxx内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)烧写。
在线编程(In-Circuit Programming – ICP)方式用于更新闪存存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载用户应用程序到微控制器中。ICP是一种快速有效的编程方法,消除了封装和管座的困扰。
与ICP方式对应,在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口(如I/O端口、USB、CAN、UART、I 2 C、SPI等)下载程序或数据到存储器中。IAP允许用户在程序运行时重新烧写闪存存储器中的内容。然而,IAP要求至少有一部分程序已经使用ICP烧到闪存存储器中。
闪存接口是在AHB协议上实现了对指令和数据的访问,它通过对存储器的预取缓存,加快了存储器的访问;闪存接口还实现了在所有工作电压下对闪存编程和擦除所需的逻辑电路,这里还包括访问和写入保护以及选择字节的控制。
02. 闪存模块组织
03. FLASH基本结构
04. FLASH解锁
- FPEC共有三个键值:
RDPRT键 = 0x000000A5
KEY1 = 0x45670123
KEY2 = 0xCDEF89AB
- 解锁:
复位后,FPEC被保护,不能写入FLASH_CR
在FLASH_KEYR先写入KEY1,再写入KEY2,解锁
错误的操作序列会在下次复位前锁死FPEC和FLASH_CR
- 加锁:
设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR
05. 使用指针访问存储器
•使用指针读指定地址下的存储器:
uint16_t Data = *((__IO uint16_t *)(0x08000000));
•使用指针写指定地址下的存储器:
*((__IO uint16_t *)(0x08000000)) = 0x1234;
•其中:
#define __IO volatile
06. 程序存储器编程
编程过程
闪存页擦除过程
闪存全擦除过程
07. 选项字节
•RDP:写入RDPRT键(0x000000A5)后解除读保护
•USER:配置硬件看门狗和进入停机/待机模式是否产生复位
•Data0/1:用户可自定义使用
•WRP0/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量)
08. 选项字节编程
•检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作
•解锁FLASH_CR的OPTWRE位
•设置FLASH_CR的OPTPG位为1
•写入要编程的半字到指定的地址
•等待BSY位变为0
•读出写入的地址并验证数据
09. 选项字节擦除
•检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作
•解锁FLASH_CR的OPTWRE位
•设置FLASH_CR的OPTER位为1
•设置FLASH_CR的STRT位为1
•等待BSY位变为0
•读出被擦除的选择字节并做验证
10. 器件电子签名
•电子签名存放在闪存存储器模块的系统存储区域,包含的芯片识别信息在出厂时编写,不可更改,使用指针读指定地址下的存储器可获取电子签名
•闪存容量寄存器:
基地址:0x1FFF F7E0
大小:16位
•产品唯一身份标识寄存器:
基地址: 0x1FFF F7E8
大小:96位
11. 附录
参考: 【STM32】江科大STM32学习笔记汇总