STM32FLASH闪存

文章目录

  • 前言
  • 首先来回顾一下存储器映像
  • FLASH简介
  • 闪存模块组织
  • Flash基本结构(关系)图
  • Flash解锁
  • 使用指针访问存储器
  • FLASH操作
    • Flash全擦除
    • Flash页擦除
    • Flash写入
  • 选项字节
  • 选项字节操作
    • 选项字节擦除
    • 选项字节写入
  • 器件电子签名
  • 注意
  • 闪存控制寄存器一览


前言

本文主要解释的为STM32的内部闪存(非易失性存储器)


首先来回顾一下存储器映像

本文就是对于ROM类型的说明,包括Flash、系统存储器(原厂写入,一般不修改)、选项字节等
在这里插入图片描述

FLASH简介

  • STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程读写
  • FLASH的用途:
    利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序中编程(IAP),实现程序的自我更新
  • 在线编程(In-Circuit Programming –
    ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序
  • 在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序(不研究)

闪存模块组织

注意各块的首地址规律,以便方便的找到首地址进行写入和区分块,对页的操作一般都以某页页首地址开始,写操作不能跨页,读操作可以跨页
在这里插入图片描述

Flash基本结构(关系)图

在这里插入图片描述

Flash解锁

对于这些需要保存在flash的重要数据,需要有安全的保护措施,STM32Flash也设置了特殊的安全设置:
FPEC共有三个键值:

  • RDPRT键 = 0x000000A5
  • KEY1 = 0x45670123
  • KEY2 = 0xCDEF89AB

解锁:

  • 复位后,FPEC被保护,不能写入FLASH_CR
  • 在FLASH_KEYR先写入KEY1,再写入KEY2,解锁
  • 错误的操作序列会在下次复位前锁死FPEC和FLASH_CR

加锁:

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

使用指针访问存储器

因为STM32的内部存储器都是挂载到总线上的,可以直接使用指针读取到

  • 使用指针读指定地址下的存储器:
    uint16_t Data = *((__IO uint16_t *)(0x08000000));
  • 使用指针写指定地址下的存储器(需要先解锁):
    *((__IO uint16_t *)(0x08000000)) = 0x1234;
  • 其中: #define __IO volatile
    用于防止编译器优化,例如编译器会把它认为无用的内容给优化掉(如空循环等),那加上这个宏定义就可以避免内容被优化掉,keil默认是低级优化,一般没有影响,若提高了优化等级就需要注意加上这个宏定义。还有例如需要多次使用某变量,编译器会把变量先存在高速缓存中,执行结束后再存回内存,若代码为多线程,中途使用中断修改了此变量,而高速缓存中此变量并没有改变,会导致错误,此时加上这个宏定义,表示此变量为易变变量,要直接去内存找,就可以避免这种错误

FLASH操作

Flash全擦除

在这里插入图片描述

Flash页擦除

在这里插入图片描述

Flash写入

再写入前会先检查此地址是否擦除,未擦除则不写入
每次只能写入半字(16位)数据
写入使用指针写入即可
在这里插入图片描述

选项字节

在这里插入图片描述
以上带n的是不带n的反码,由电路自动配置

  • RDP:写入RDPRT键(0x000000A5)后解除读保护
  • USER:配置硬件看门狗和进入停机/待机模式是否产生复位
  • Data0/1:用户可自定义使用
  • WRP0/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量),给0实施写保护

选项字节操作

选项字节擦除

  • 检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作,事前等待
  • 解锁FLASH_CR的OPTWRE位,解锁选项字节,与flash锁类似,对FPEC解锁后,必须分别写入KEY1和KEY2(和flash的密钥相同)到FLASH_OPTKEYR寄存器
  • 设置FLASH_CR的OPTER位为1,即将擦除选项字节
  • 设置FLASH_CR的STRT位为1,开始擦除
  • 等待BSY位变为0,等待执行结束
  • 读出被擦除的选择字节并做验证

选项字节写入

  • 检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作,事前等待
  • 解锁FLASH_CR的OPTWRE位,解锁选项字节
  • 设置FLASH_CR的OPTPG位为1,准备写入
  • 写入要编程的半字到指定的地址
  • 等待BSY位变为0,等待写入完成
  • 读出写入的地址并验证数据

器件电子签名

电子签名存放在闪存存储器模块的系统存储区域,包含的芯片识别信息在出厂时编写,不可更改,使用指针读指定地址下的存储器可获取电子签名

闪存容量寄存器
基地址:0x1FFF F7E0
大小:16位

产品唯一身份标识寄存器
基地址: 0x1FFF F7E8
大小:96位


注意

FLASH的注意事项基本一致:

  • 写入操作前,必须先进行写使能
  • 每个数据位只能由1改写为0,不能由0改写为1
  • 写入数据前必须先擦除,擦除后,所有数据位变为1
  • 擦除必须按最小擦除单元进行 连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入
  • 写入操作结束后,芯片进入忙状态,不响应新的读写操作

在编程过程中,(BSY位为’1’),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束,可能会导致中断响应不及时

闪存控制寄存器一览

在这里插入图片描述

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

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

相关文章

Spring Boot 2 入门基础

学习要求 ● 熟悉Spring基础 ● 熟悉Maven使用 环境要求 ● Java8及以上 ● Maven 3.3及以上:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-system-requirements 学习资料 ● 文档地址: htt…

松下MINAS A6B系列旋转电机规格书--A系列

一、松下电机型号的识别方法 二、松下标准型电机型号大全 三、松下电机的规格 四、电机外观 五、XA,XB连接器 六、USB连接器 七、EtherCAT用连接器X2A、X2B 八、IO连接器X4 输入输出信号接口 九、编码器连接器 十、模拟监视器用连接器X7 十一、电源连接器以及端子台…

python-web框架应用程序-Django环境搭建

python-web应用程序-Django环境搭建 一、Django入门 使用Django(http://djangoproject.com/)来开发一个名为“学习笔记”(Learning Log)的项目,这是一个在线日志系统,让你能够记录所学习的有关特定主题的知…

DiskCatalogMaker for Mac:您的磁盘目录管理专家

对于需要管理大量磁盘文件的用户来说,DiskCatalogMaker for Mac无疑是一款不可或缺的工具。这款专为Mac用户设计的磁盘目录制作软件,以其简洁的操作界面和强大的功能,帮助您轻松创建和管理磁盘目录。 DiskCatalogMaker支持多种磁盘格式&…

CSS学习笔记之高级教程(一)

1、圆角:border-radius border-radius 属性可以接受一到四个值。规则如下: 四个值 - border-radius: 15px 50px 30px 5px;(依次分别用于:左上角、右上角、右下角、左下角) 三个值 - border-radius: 15px 50px 30px;&a…

简介有限面积和无限周长

前言 分形理论是一种非常重要的科学概念,它被广泛应用于物理学、数学、生物学等领域。分形理论描述了一种重复自相似的结构,这种结构在不同的尺度上都具有类似的形态。由于分形理论的应用广泛且深远,了解分形理论可以帮助人们更好地理解自然界和人造世界中的现象。 作为一…

增强团队建设和创造力的 6 个敏捷游戏

加入敏捷框架提供了对资源的访问和支持,可以帮助你的组织最大限度地发挥敏捷的优势。它还提供了一个与其他敏捷从业者联系的平台,以共享最佳实践并相互学习。 实践敏捷工作方法可以让团队按照自己的节奏,尽可能多地发挥创造力来追求目标&…

网易狼人杀 设置点击自动发言

我们玩网易狼人杀 刚开始 都会发现 要按住麦克风才能发言 不得不说 相当的麻烦 我们可以点击如下图 右上角这个设置的齿轮 新弹出的设置面板上 勾选这个点击发言 然后 我们只需要 点一下 就可以进入发言状态 然后 再点一下即可停止发言 会方便非常多

游泳时用什么耳机听歌好?精品榜前四游泳耳机揭秘,款款佳品!

游泳时用什么耳机听歌好?这无疑是众多水上运动爱好者的共同疑问。在享受游泳带来的清凉与畅快时,若能伴随着悦耳的音乐,无疑能让整个体验更加完美。然而,市面上的游泳耳机种类繁多,品质各异,如何选择一款既…

网盘拉新项目,一单6.1,分享就能赚钱,人人可做!

前言 有几个圈友在问我,2024年有没有好的副业变现项目,我盘点近期比较热门的项目,比如红包封面、公众号爆文、视频号分成计划、网盘拉新等,最后我给他们的建议是网盘拉新项目。 该项目算比较老了,但确实是一个比较赚钱…

探索Codigger文件管理器(File Explorer)的创新与实用性

在数字时代,文件资源管理器作为桌面环境中不可或缺的一部分,承担着管理文件和文件夹的重要职责。Codigger文件管理器(File Explorer)以其独特的创新和实用性,为用户提供了高效、便捷的文件管理体验。 Codigger文件管理…

k8s 的 pod 基础 2

一、pod的镜像拉取策略 (image PullPolicy) Pod 的核心是运行容器,必须指定容器引擎,比如 Docker,启动容器时,需要拉取镜像,k8s 的镜像拉取策略可以由用户指定: 1、IfNotPresent &…

NTLM Relay Gat:自动化NTLM中继安全检测工具

关于NTLM Relay Gat NTLM Relay Gat是一款功能强大的NTLM中继威胁检测工具,该工具旨在利用Impacket工具套件中的ntlmrelayx.py脚本在目标环境中实现NTLM中继攻击风险检测,以帮助研究人员确定目标环境是否能够抵御NTLM中继攻击。 功能介绍 1、多线程支持…

关于如何在 smartforms 中 debug

发现一旦smartforms 复杂起来,Debug的时候就一下子找不到指定位置,所以如何才能最简单的找到指定位置呢 以这个为案例 然后打上断点即可debug

Science Advances|柔性超韧半导体纤维的大规模制备(柔性半导体器件/可穿戴电子/纤维器件/柔性电子)

北京大学 雷霆(Ting Lei)团队,在《Science Advances》上发布了一篇题为“Continuous production of ultratough semiconducting polymer fibers with high electronic performance”的论文。论文内容如下: 一、 摘要 共轭聚合物具有良好的光电特性,但其脆性和机械特性差,…

华大单片机下载报错“Error:Flash Download failed-“Cortex-M4””

Error:Flash Download failed-“Cortex-M4” 问题说明 使用华大单片机HC32F460KETA下载程序时,出现关于M4核的报错,具体如下: 此种情况下代码编译时没有问题的,只是下载时就会显示错误。 解决方法 注意最后一步选默…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

[C#]使用C#部署yolov8-cls的图像分类的tensorrt模型

【测试通过环境】 win10 x64 vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super 版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll,TensorRtExtern源码地址:TensorRT-CShar…

DOM型XSS

前言 什么是DOM型XSS DOM型XSS漏洞是一种特殊类型的XSS,是基于文档对象模型 Document Object Model (DOM)的一种漏洞。 什么是DOM DOM全称Document Object Model,是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式&#xff0…

门店系统会员开卡办卡库存收银小程序开发

门店系统会员开卡办卡库存收银小程序开发 一款专门针对门店管理开发的管理系统 系统支持电脑端收银、手机端收银、以及安装apk到安卓收银机收银。 支持门店客户开卡、办卡。支持会员卡、次卡、时卡、通卡。 支持门店进行线上线下营销,可以免费生成店铺专属小程序…