STM32F1之FLASH闪存

目录

1.  简介

2.  闪存模块组织

3.  FLASH基本结构

4.  FLASH解锁

5.  使用指针访问存储器

6.  程序存储器全擦除

7.  程序存储器页擦除

8.  程序存储器编程

9.  选项字节


 

1.  简介

        STM32F1系列的FLASH包含程序存储器系统存储器选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程。

读写FLASH的用途:     

利用程序存储器的剩余空间来保存掉电不丢失的用户数据;     

通过在程序中编程(IAP),实现程序的自我更新。

        在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序。

JTAG调试接口(JTAG-DP)提供基于JTAG(Joint Test Action Group 联合测试行动小组)协议的5线标准接口。

SWD调试接口(SWD-DP)提供基于SWD(Serial Wire Debug 串行线调试)协议的2线标准接口。

        在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序。

2.  闪存模块组织

        小容量产品:是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。

        中容量产品:是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。

        大容量产品:是指闪存存储器容量在 256K 至 512K 字节之间的 STM32F101xx和STM32F103xx微控制器。

3.  FLASH基本结构

4.  FLASH解锁

FPEC共有三个键值:     

        RDPRT键 = 0x000000A5

        KEY1 = 0x45670123     

        KEY2 = 0xCDEF89AB

解锁:     

        复位后,FPEC被保护,不能写入FLASH_CR     

        在FLASH_KEYR先写入KEY1,再写入KEY2,解锁     

        错误的操作序列会在下次复位前锁死FPEC和FLASH_CR

加锁:     

        设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR

5.  使用指针访问存储器

使用指针读指定地址下的存储器:     

uint16_t Data = *((__IO uint16_t *)(0x08000000));

使用指针写指定地址下的存储器:   

 *((__IO uint16_t *)(0x08000000)) = 0x1234;

其中:   

 #define    __IO    volatile

6.  程序存储器全擦除

        可以用整片擦除功能擦除所有用户区的闪存,信息块不受此操作影响。

过程:

        ① 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;

        ② 设置FLASH_CR寄存器的MER位为’1’;

        ③ 设置FLASH_CR寄存器的STRT位为’1’;

        ④ 等待BSY位变为’0’;

        ⑤ 读出所有页并做验证。

7.  程序存储器页擦除

        闪存的任何一页都可以通过FPEC的页擦除功能擦除。

过程:

        ① 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;

        ② 设置FLASH_CR寄存器的PER位为’1’;

        ③ 用FLASH_AR寄存器选择要擦除的页;

        ④ 设置FLASH_CR寄存器的STRT位为’1’;

        ⑤ 等待BSY位变为’0’;

        ⑥ 读出被擦除的页并做验证。

8.  程序存储器编程

        对主闪存编程每次可以写入16位。当FLASH_CR寄存器的PG位为’1’时,在一个闪存地址写入一个半字将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。在编程过程中(BSY位为’1’),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束。

过程:

① 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作;

② 设置FLASH_CR寄存器的PG位为’1’;

③ 在指定的地址写入要编程的半字;

④ 等待BSY位变为’0’;

⑤ 读出写入的地址并验证数据。

        这种模式下CPU以标准的写半字的方式烧写闪存,FLASH_CR寄存器的PG位必须置’1’。FPEC先读出指定地址的内容并检查它是否被擦除,如未被擦除则不执行编程并在FLASH_SR寄存器的PGERR位提出警告(唯一的例外是当要烧写的数值是0x0000时,0x0000可被正确烧入且PGERR位不被置位);如果指定的地址在FLASH_WRPR中设定为写保护,则不执行编程并在FLASH_SR寄存器的WRPRTERR位置’1’提出警告。FLASH_SR寄存器的EOP为’1’时表示编程结束。

字(Word):32位长的数据或指令

半字(Half Word):16位长的数据或指令

字节(Byte):8位长的数据或指令

9.  选项字节

        选择字节共有8个字节,由用户根据应用的需要配置;例如:可以选择使用硬件模式的看门狗或软件的看门狗。

在选择字节中每个32位的字被划分为下述格式:

选择字节块中选择字节的组织结构如下:

RDP:写入RDPRT键(0x000000A5)后解除读保护

USER:配置硬件看门狗和进入停机/待机模式是否产生复位

Data0/1:用户可自定义使用

WRP0/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量)

选项字节编程:

        ① 检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作

        ② 解锁FLASH_CR的OPTWRE位

        ③ 设置FLASH_CR的OPTPG位为1

        ④ 写入要编程的半字到指定的地址

        ⑤ 等待BSY位变为0

        ⑥ 读出写入的地址并验证数据

选项字节擦除:

        ① 检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作

        ② 解锁FLASH_CR的OPTWRE位

        ③ 设置FLASH_CR的OPTER位为1

        ④ 设置FLASH_CR的STRT位为1

        ⑤ 等待BSY位变为0

        ⑥ 读出被擦除的选择字节并做验证

STM32F1之I2C通信-CSDN博客

STM32学习笔记_时光の尘的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/594300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MapReduce笔记

实现分布式的作用: 通过并行处理提高能力通过复制机制进行容错处理与传感器等物理设备的分布相匹配通过隔离实现安全 难点: 许多并行的部件,他们之间有复杂的相互作用必须应对处理部分故障难以实现性能潜力 容错 1000多台服务器、庞大的网络…

【busybox记录】【shell指令】b2sum

目录 内容来源: 【GUN】【b2sum】指令介绍 【busybox】【b2sum】指令介绍 【linux】【b2sum】指令介绍 使用示例: BLAKE2摘要(512bit) - 默认输出 BLAKE2摘要(512bit) - 指定校验和长度 BLAKE2摘要…

Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息

Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息 沪深股市每日成交概况信息,都存放在STK_EXCHANGE_TRADE_INFO表中,该表保存在finance包中。要查看表中的数据信息,需要使用query()函数。 单击聚宽JoinQuant量化炒股平台中的“…

还有谁……想知道“线下与线上布局之间的本质区别”

还有谁……想知道 线下与线上布局之间的本质区别 hello,亲爱的你们好.… 我是你们的好朋友,正博,今天是非常特殊的一天,给每一位读者准备了一份特殊的神秘礼物…… 在分享【特殊礼物】之前,请允许我分享一下《线下营销与线上销售的9大核心差异》…… 1、注意力; 2、销…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器,并将数据返回给用户的一种方式,这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module: 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

我从这些书籍中学来的财务以及税务知识

“你不能指望在开始工作的头两年攒下任何积蓄。” 这句话一直是我的座右铭,也是我给大学生的个人理财建议。这也就难怪我二十出头的时候,基本就是靠薪水过日子。 回想起来,我意识到其实这并不是最好的建议,甚至非常不好。 我现…

MySQL卸载

目录 MySQL卸载 1.关闭服务 2.卸载软件 3.清理文件夹 4.清理注册表 5.重启电脑 说明 上一篇文章介绍了数据库的一些基本概念,以及MySQL的数据模型,并在文章末尾附上了MySQL的下载地址,但是对于已经安装过MySQL的同学,如果需…

【小菜鸟之---Ansible基础详解】

文章目录 1 【Ansible简介】1.1简介1.2 Ansible 特点1.3 Ansible的工作机制1.4Ansible任务工作模式 2【安装部署】2.1安装命令2.2 Ansible配置文件2.3主机清单配置2.4 基于ssh免密登录2.5常用命令 3【Ansible常用模块】3.1 ping模块3.2 shell模块3.3 command模块3.4 copy模块3.…

力扣100284. 有效单词(C++)

【题解】 (实际在力扣中运行的代码只需要把下方的check函数放到力扣作答区给的模板中就可以) #include <bits/stdc.h> #include <iostream> #include <vector> #include <string> #include <cctype> #include <cstring> #include <st…

【机器学习】机器学习在教育领域的应用场景探索

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

漫谈音频深度伪造技术

作为人工智能时代的新型媒体合成技术&#xff0c;深度伪造技术近年来在网络媒体中的涉及领域越发广泛、出现频次越发频繁。据路透社报道&#xff0c;2023年&#xff0c;社交媒体网站上发布50万个深度伪造的语音和视频。 1、深度伪造技术的五个方面 音频深度伪造技术&#xff…

Spring拦截器

一、简介&#xff1a; Spring Boot 拦截器是面向切面编程-----AOP 的具体实现&#xff0c;用于对请求做预处理。 1.1.什么是拦截器&#xff1a;在AOP&#xff08;Aspect-Oriented Programming&#xff09;中用于在某个方法或字段被访问之前&#xff0c;进行拦截然后在之前或之…

华为二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备&#xff0c;用于在局域网&#xff08;LAN&#xff09;中转发数据帧。它工作在OSI模型的第二层&#xff0c;即数据链路层。二层交换机通过学习和维护MAC地址表&#xff0c;实现了数据的快速转发和广播域的隔离。 实…

读天才与算法:人脑与AI的数学思维笔记19_深度数学

1. 深度数学 1.1. 组合与选择&#xff0c;是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里&#xff08;Paul Valry&#xff09; 1.2. 利用以往的数学定理证明过程训练算法&#xff0c;以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉&#xff0c…

17_Scala面向对象高阶功能

文章目录 1.继承1.1 构造对象时,父类对象优于子类对象1.2父类主构造有参数,子类必须要显示地调用父类主构造器并传值 2.封装3.抽象3.1抽象定义3.2子类继承抽象类3.3抽象属性 4.伴生对象4.1创建类和伴生对象4.2调用 1.继承 –和Java一样,权限protected , public.父类定义子类用…

【Java】基本程序设计结构(二)

前言&#xff1a;上一篇我们详细介绍了Java基本程序设计结构中前半部分&#xff0c;一个简单的Java应用&#xff0c;注释&#xff0c;数据类型&#xff0c;变量与常量&#xff0c;运算符&#xff0c;字符串。包括本篇将延续上篇内容介绍后续内容&#xff0c;包括输入输出&#…

UE5 UMG

锚点 参考链接&#xff1a;虚幻5UI系统&#xff08;UMG&#xff09;基础&#xff08;已完结&#xff09;_哔哩哔哩_bilibili

政安晨:【Keras机器学习示例演绎】(三十七)—— 在计算机视觉中学习调整大小

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文目标&#xff1a;在计算机视觉中学习调整大小…

数据结构(十一)----图的应用

目录 一.最小生成树 1.Prim算法&#xff08;普里姆&#xff09; 2.Kruskal算法(克鲁斯卡尔): 二.最短路径&#xff08;BFS算法&#xff09; 1.单源最短路径 &#xff08;1&#xff09;BFS算法&#xff08;无权图&#xff09; &#xff08;2&#xff09;Dijkstra算法&…

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路&#xff1a; 首先将水平的控件 水平布局 &#xff0c;然后相对垂直的控件 垂直布局 &#xff0c;哪怕是底下的groupBox也需要和里面的内容 水平布局&#xff0c;然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…