<p id="main-toc"><strong>目录</strong></p>
讯享网
一、简介
1、闪存模块组织
2、FLASh基本结构
3、FLash写入和读取操作
4、编程流程
5、选项字节格式
6、选项字节编程步骤
二、读写芯片内部FLASH编程
三、器件电子签名
1、简介
2、编程实现
- STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
- 读写FLASH的用途:利用程序存储器的剩余空间来保存掉电不丢失的用户数据;通过在程序中编程(IAP),实现程序的自我更新。
- 在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载下载程序
- 在程序中编程(In-Application Programming – IAP),可以使用微控制器支持的任一种通信接口下载程序
- STM32F103C8T6 中Flash为64字节
ROM和RAM存储 :

主存储器利用页单元来存储数据,每个页的大小为1KByte,C8T6芯片64KByte ,所以只用了前64页。
启动程序代码即系统存储器,大小为2KByte

- 先解锁
FPEC(闪存编程/擦除控制器)共有三个键值:
解锁:
复位后,FPEC被保护,不能写入FLASH_CR
在FLASH_KEYR先写入KEY1,再写入KEY2,解锁
错误的操作序列会在下次复位前锁死FPEC和FLASH_CR
加锁:
设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR
- 读写
- 使用指针读指定地址下的存储器: uint16_t Data = *((__IO uint16_t *)(0x0));
- 使用指针写指定地址下的存储器: *((__IO uint16_t *)(0x0)) = 0x1234;
- 其中: #define __IO volatile
volatile告诉编译器这个变量是易变的,不要去优化它,每次必须从内存中读取。
FLASH_CR寄存器中某位:
- LOCK:锁,只能写’1’。 当该位为’1’时表示FPEC和FLASH_CR被锁住。在检测到正确的解 锁序列后,硬件清除此位为’0’。 在一次不成功的解锁操作后,下次系统复位前,该位不能再被改变。
- PG:编程,选择编程操作,置’1‘。
- PER:页擦除,选择整页擦除,置’1‘。
- START:开始,当该位为1时将触发一次擦除操作。该位只可由软件置1,并在BSY变为’1‘时,清为’0‘。
- MER:全擦除,选择擦除所有用户页,置’1‘
FLASH_SR寄存器中某位:

- BSY:忙,该位指示闪存操作正在进行。在闪存操作开始时,该位被设置为’1‘;在操作结束或发生错误时该位被清除为‘0’
- 编程过程

- 闪存页擦除
- 闪存全擦除

每个选择位都在信息 块中有它的反码位,在装载选择位时反码位用于验证选择位是否正确,如果有任何的差别,将 产生一个选择字节错误标志(OPTERR)

- RDP:写入RDPRT键(0x000000A5)后解除读保护
- USER:配置硬件看门狗和进入停机/待机模式是否产生复位
- Data0/1:用户可自定义使用 WRP0/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量)
- 选项字节编程
- 检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作
- 解锁FLASH_CR的OPTWRE(允许写选择字节),当该位为1时 ,允许对选择字节进行编程操作。当在FLASH_OPTKETR寄存器写入正确的键序列后,该位被置为‘1’。软件可清除此位。
- 设置FLASH_CR的OPTPG位为1
- 写入要编程的半字到指定的地址
- 等待BSY位变为0
- 读出写入的地址并验证数据
- 选项字节擦除
- 检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作
- 解锁FLASH_CR的OPTWRE位
- 设置FLASH_CR的OPTER位为1
- 设置FLASH_CR的OPTER位为1
- 等待BSY位变为0
- 读出被擦除的选择字节并做验证
MyFlash.c:
讯享网
MyFlash.h:
Store.c:
用来在Flash内部储存数据
讯享网
Store.h:
main.c:
讯享网
- 电子签名存放在闪存存储器模块的系统存储区域,包含的芯片识别信息在出厂时编写,不可更改,使用指针读指定地址下的存储器可获取电子签名
- 闪存容量寄存器:
基地址:0x1FFF F7E0 大小:16位 - 产品唯一身份标识寄存器:
基地址: 0x1FFF F7E8 大小:96位
main.c:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170283.html