当前位置: 首页 > article >正文

STM32——Flash闪存

以上部分,主存储器:程序存储器;

启动程序代码:系统存储器;

用户选择字节:选项字节

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

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江科大老师的视频完结!


http://www.kler.cn/a/288411.html

相关文章:

  • 前缀和技巧解析
  • IP数据云 识别和分析tor、proxy等各类型代理
  • 一键生成本地SSL证书:打造HTTPS安全环境
  • 用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • 基于碎纸片的拼接复原算法及MATLAB实现
  • 人脸表情识别/情绪识别的参考参数及相关开源产品汇总
  • LLM大模型教程:低使用门槛开源大模型服务框架Ollama
  • 提升效率!ArcGIS中创建脚本工具
  • 压缩大型语言模型 LLMs
  • 智能提醒助理系列-Nginx搭建
  • MySQL高级课程:索引设计与性能优化的最佳实践
  • 为初学者简单易懂地讲解Transformer的基础知识是什么?
  • vue,小程序,uni-app的生命周期
  • 【HarmonyOS 4.0】鸿蒙应用模型
  • [Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解
  • 【JavaEE初阶】HTTP请求(Request)
  • 某付宝又火了!什么样的人能够申请网商贷?个人也能申请吗?
  • Java基于微信小程序的超市购物管理系统
  • golang中return和defer的执行顺序的一道题
  • 华为与联发科的专利博弈:技术较量还是市场重塑?
  • 【区块链 + 物联网】斐得坊智慧停车区块链 | FISCO BCOS应用案例
  • 【教程】2024.09.03 Qlib数据加载器以及数据集加载器 Alpha158 Aplha360详细的讲解,以及源码
  • JAVAEE初阶第二节——多线程基础(上)
  • golang关于slice map函数传参的小问题
  • 娱乐小项目-树莓派履带小车