STM32FLASH闪存

news2025/5/20 5:07:57

文章目录

  • 前言
  • 首先来回顾一下存储器映像
  • 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暂停,直到此次闪存编程结束,可能会导致中断响应不及时

闪存控制寄存器一览

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bentham Science药学全文期刊库文献在家轻松下载

今天讲一个药学期刊库——Bentham Science药学全文期刊数据库 Bentham Science出版公司,作为全球范围内主要的制药、医疗、生物医学及化学出版商之一,出版期刊质量在全球享有广泛赞誉,其中有54种期刊被ISI收录,43%被PubMed收录&a…

Vue3 图片或视频下载跨域或文件损坏的解决方法

Vue3 图片或视频下载跨域或文件损坏的解决方法 修改跨域配置文件下载方法 修改跨域配置文件 修改vite.config.ts文件proxy里面写跨域地址,如下图,图片地址就是我们要跨域的目标地址: 下载方法 如下就是我取消上面那句后的报错 然后调用两…

「清新题精讲」CF249D - Donkey and Stars

更好的阅读体验 CF249D - Donkey and Stars Description 给定 n n n 个点 ( x i , y i ) (x_i,y_i) (xi​,yi​) 和 a , b , c , d a,b,c,d a,b,c,d,求出最多有多少个点依次连接而成的折线上线段的斜率在 ( a b , c d ) (\frac{a}{b},\frac{c}{d}) (ba​,dc​…

​代康伟的智慧引领,北汽蓝谷在新能源汽车市场的革新之路

在新能源汽车市场的浪潮中,北汽蓝谷以其独特的场景化造车理念,成为了行业的引领者。2023年,北汽蓝谷的极狐品牌在产品投放上明显加快,推出了多款基于场景化造车理念的新车,如极狐阿尔法S/T森林版和极狐汽车考拉等&…

huggingface的self.state与self.control来源(TrainerState与TrainerControl)

文章目录 前言一、huggingface的trainer的self.state与self.control初始化调用二、TrainerState源码解读(self.state)1、huggingface中self.state初始化参数2、TrainerState类的Demo 三、TrainerControl源码解读(self.control)总结 前言 在 Hugging Face 中,self.s…

力扣:226. 翻转二叉树

226. 翻转二叉树 已解答 简单 相关标签 相关企业 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入&#xff1a…

数组-检查数组内是否存在和为7的倍数的子序列

一、题目描述 二、解题思路 这里首先要分辨清楚是子序列还是子数组 原数组:[1,2,3,4,5] 子序列:元素和元素之间相对位置保持不变,但是在原数组中不一定连续,如:[1,3,4]; 子数组:元素元素之间保…

canfd与can2.0关系

canfd是can2.0的升级版, 支持canfd的设备就支持can2.0,但can2.0的设备不支持canfd 参考 是选CAN接口卡还是CANFD接口卡_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hh411K7Zn/?spm_id_from333.999.0.0 哪些STM32有CANFD外设 STM32G0, STM…

一款免费的软件媒体系统软件!!【送源码】

Jellyfin是一个免费的软件媒体系统,让您在管理和流媒体控制您的媒体。它是专有的Emby和Plex的替代品,通过多个应用程序从专用服务器向最终用户设备提供媒体。Jellvfin是Emby的3.5.2版本的后裔,并被移植到.NETCore框架中,以实现完全…

新火种AI|寻求合作伙伴,展开豪赌,推出神秘AI项目...苹果能否突破AI困境?

作者:小岩 编辑:彩云 2024年,伴随着AI技术的多次爆火,不仅各大科技巨头纷纷进入AI赛道展开角力,诸多智能手机厂商也纷纷加紧布局相关技术,推出众多AI手机。作为手机领域的龙头老大,苹果自然是…

基于单片机的步进电机控制系统研究

摘 要 : 近年来 , 步进电机凭借其定位精度高 、 使用方便 、 性价比高 、 容易控制等优点 , 在各领域受到广泛应用 。 文中利用C52 单片机设计了一种步进电机控制系统 , 介绍了其总体方案 、 主控制模块 、 驱动电路 、 键盘 、 晶…

洗地机哪个牌子最好用?十大名牌洗地机排行榜

作为一种新兴的智能家居产品,洗地机的市场规模已经突破了百亿大关。如此庞大的市场自然吸引了大量资本的涌入,许多品牌纷纷推出自己的洗地机产品,试图在这个竞争激烈的市场中占据一席之地。然而,面对如此多的品牌和型号&#xff0…

SelfKG论文翻译

SelfKG: Self-Supervised Entity Alignment in Knowledge Graphs SelfKG:知识图中的自监督实体对齐 ABSTRACT 实体对齐旨在识别不同知识图谱(KG)中的等效实体,是构建网络规模知识图谱的基本问题。在其发展过程中,标…

Java面试题分享-敏感词替换 java 版本

入职啦最近更新了一些后端笔试、面试题目,大家看看能快速实现吗? 关注 入职啦 微信公众号,每日更新有用的知识,Python,Java,Golang,Rust,javascript 等语言都有 不要再用replaceAll做…

Django之文件上传(一)

一、环境搭建 建立项目 django-admin startproject project_demo配置数据库(以MySQL为例) # settings.py DATABASES = {default: {ENGINE: django.db.backends.mysql,NAME: django_file4,USER: root,PASSWORD: 123,HOST: 192.168.31.151,PORT: 3306,} }建立模型 class UploadF…

Vue 3 教程:核心知识

Vue 3 教程:核心知识 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 Compo…

Codeforces Round 948 (Div. 2) E. Tensor(思维题-交互)

题目 n(3<n<100)个点的有向图&#xff0c; 图的边的关系未知&#xff0c;但保证以下两点&#xff1a; 1. 只存在j->i&#xff08;i<j&#xff09;的边 2. 对于任意三个点i、j、k&#xff08;i<j<k&#xff09;&#xff0c;要么k可以到达i&#xff0c;要么…

基于java实现图片中任意封闭区域识别

需求&#xff1a; 在浏览器中给用户呈现一张图片&#xff0c;用户点击图片中的某些标志物&#xff0c;需要系统给出标志物的信息反馈&#xff0c;达到一个交互的作用。 比如下图中&#xff0c;点击某个封闭区域时候&#xff0c;需要告知用户点击的区域名称及图形形状特性等等。…

Django之rest_framework(九)

一、分页-PageNumberPagination类 REST framework提供了分页的支持 官网:Pagination - Django REST framework 1.1、全局设置 # settings.py REST_FRAMEWORK = {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 100 # 每页数目 }提示…

相对论表明速度越快时间越慢,为什么速度会影响时间?

在物理学的宏伟殿堂中&#xff0c;相对论以其深邃的洞察力&#xff0c;挑战了我们对时间和空间的传统认识。1905年&#xff0c;阿尔伯特爱因斯坦提出了狭义相对论&#xff0c;揭示了在所有惯性参照系中&#xff0c;光速是常数的惊人事实。 随后在1915年&#xff0c;他进一步发展…