网站改版 重定向服务企业网站建设的IT

以上部分,主存储器:程序存储器;
启动程序代码:系统存储器;
用户选择字节:选项字节

以下是闪存的管理员,用于擦除和读写的地址

C8T6一共64K,主存储器为64页
以下是整体框图:

FLASH的整体流程:
1、解锁+加锁
通过键寄存器对FLASH进行解锁(先用KEY1解锁,再用KEY2解锁),上一步完成后,要尽快加锁:加锁的时候在LOCK位写1即可锁住

2、使用指针访问存储器
读取寄存器地址为0X08000000的内容,将其强制转换为16位的指针类型,前一个*表示:指针取内容,将该地址下的内容取出(不需要解锁那一步,写才需要)
__IO用了define定义为变量,当编译器没有优化的时候,这个可加可不加,但是当编译器优化时,为防止有些必须代码被优化掉,可在其前加__IO,防止被优化

3、全擦除过程
在程序中,并没有判断LOCK位是否为1的过程,直接执行解锁功能
也不会去读出并验证所有页的数据
此时的信息块(系统存储器+选项字节)不受影响

闪存页擦除

4、写编程
如果需要写入很多数据就不断调用写入程序即可

5、选项字节的擦除(了解)

6、选项字节写入(了解)

7、器件电子签名(了解)

代码部分:
首先是编写MyFlash文件,包含写编程、擦除和读的程序;
之后再建立一个实现参数读写和存储管理功能的Store,其中建立一个数组用于放置掉电不丢失的数据,调用函数自动备份到Flash中;
之后在主函数通过写入数据调用store的数组,并备份到Flash中,实现任意读写参数,掉电不丢失功能

1、MyFlash
读取函数(32位、16位、8位)



全擦除函数

页擦除函数:

编程字节:


2、store模块
(1)先定义一个SRAM数组,用于管理FLASH最后一页数据,实现参数的任意读写和保存,需要备份再统一转到闪存中
512:16位2字节正好对应闪存一页1024字节


(2)判断闪存是否是第一次初始化
判断该页地址下的第一个半字是否是A5A5——不是,则表明第一次初始化,先进行页擦除——在该页的第一个半字处写入A5A5——将剩余的字节均写为0

(2)上电后将闪存的数据全都转移到SRAM中,保证掉电数据不丢失(闪存——SRAM的数据转移)

(3)SRAM——闪存的数据转换函数

(4)清除所有数据函数(先将SRAM的数据清零——再将数据从SRAM转移到闪存)

主函数:除了初始化各类函数外,主要实现按键1按下数据增加
按键2按下数据全部清0
数据掉电不丢失且复位也不会改变

实验结果如下:
FLASH
读取芯片ID:
直接在main中编写:

显示结果:

STM32江科大老师的视频完结!
