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

STM32 Flash学习(一)

STM32 FLASH简介

不同型号的STM32,其Flash容量也不同。
MiniSTM32开发板选择的STM32F103RCT6的FLASH容量为256K字节,属于大容量产品。
在这里插入图片描述
STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分组成。

主存储器,该部分用来存放代码和数据常量(如const类型的数据)。
对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。

主存储器的起始地址就是 0X08000000,B0和B1都接GND的时候,就是从 0X08000000开始运行代码的。

信息块,该部分分为2个小部分,其中启动程序代码,是用来存储ST自带的启动程序,用于串口下载代码,当B0接V3.3,B1接GND的时候,运行的就是这部分代码。用户选择字节,一般用于配置写保护、读保护等功能。

闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构。

对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;

闪存的读取

内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容并得到相应的数据。
读接口在闪存端包含一个读控制器,还包含一个AHB接口与CPU衔接。

注意闪存等待时间,因为CPU运行速度比FLASH快得多,STM32F103的FLASH最快访问速度≤24MHz,如果CPU频率超过这个速度,那么必须加入等待时间。
比如我们一般使用72MHz的主频,那么FLASH等待周期就必须设置为2,该设置通过FLASH_ACR寄存器设置。

要从地址addr,读取一个半字(半字为16位,字为32位),可以通过如下的语句读取:

data = *(vu16*)addr;

将addr强制转换为vu16指针,然后取该指针所指向的地址的值,即得到了addr地址的值。
将上面的vu16改为vu8,即可读取指定地址的一个字节。

闪存的编程和擦除

STM32的闪存编程是由FPEC(闪存编程和擦除控制器)模块处理的,这个模块包含7个32位寄存器,它们分别是:

  • FPEC键寄存器(FLASH_KEYR)
  • 选择字节键寄存器(FLASH_OPTKEYR)
  • 闪存控制寄存器(FLASH_CR)
  • 闪存状态寄存器(FLASH_SR)
  • 闪存地址寄存器(FLASH_AR)
  • 选择字节寄存器(FLASH_OBR)
  • 写保护寄存器(FLASH_WRPR)

其中FPEC键寄存器总共有3个键值:
RDPRT键=0x000000A5
KEY1=0X45670123
KEY2=0XCDEF89AB

STM32复位后,FPEC模块是被保护的,不能写入FLASH_CR寄存器;
通过写入特定的序列到FLASH_KEYR寄存器可以打开FPEC模块(即写入KEY1和KEY2),只有在写保护被解除后,我们才能操作相关寄存器。

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

同样,STM32的FLASH在编程的时候,也必须要求其写入地址的FLASH是被擦除了的(其值必须是0xffff),否则无法写入,在FLASH_SR寄存器的PGERR位将得到一个警告。

在这里插入图片描述

  • 检查FLASH_CR的LOCK是否解锁,如果没有则先解锁。
  • 检查FLASH_SR寄存器的BSY位,以确认没有其它正在进行的编程操作。
  • 设置FLASH_CR寄存器的PG位为1.
  • 在指定的地址写入要编程的半字。
  • 等待BSY位变为0。
  • 读出写入的地址并验证数据。

在STM32的FLASH编程的时候,首先判断缩写地址是否被擦除。
STM32的闪存擦除分为两种:页擦除和整片擦除。

在这里插入图片描述

  • 检查FLASH_CR的LOCK是否解锁,如果没有则先解锁。
  • 检查FLASH_SR寄存器的BSY位,以确认没有其它正在进行的闪存操作。
  • 设置FLASH_CR寄存器的PER位为1。
  • 用FLASH_AR寄存器选择要擦除的页。
  • 设置FLASH_CR寄存器的STRT位为1.
  • 等待BSY位变为0.
  • 读出被擦除的页并做验证。

读写相关寄存器

FPEC键寄存器:FLASH_KEYR。
在这里插入图片描述
所有这些位都是只写的,读出时返回0。
位31~0:FKEYR:FPEC键,这些位用于属于FPEC的解锁键。
该寄存器主要用来解锁FPEC,必须在该寄存器写入特定的序列(KEY1和KEY2)解锁后,才能对FLASH_CR寄存器进行写操作。

闪存控制寄存器:FLASH_CR。
在这里插入图片描述

  • LOCK位,该位用于指示FLASH_CR寄存器是否被锁住,该位在检测到正确的解锁序列后,硬件将其清零。在一次不成功的解锁操作后,在下次系统复位之前,该位将不再改变。
  • STRT位,该位用于开始一次擦除操作。在该位写入1,将执行一次擦除操作。
  • PER位,该位用于选择页擦除操作,在页擦除的时候,需要将该位置1.
  • PG位,该位用于选择编程操作,往往FLASH写数据的时候,该位需要置1。

闪存状态寄存器:FLASH_SR。
在这里插入图片描述

  • EOP:操作结束,每当闪存操作(编程/擦除)完成时,硬件设置为1,写1清除。
  • WRPRERR:写保护错误,当对写保护的闪存地址编程时,硬件设置这位为1,写入1可以清除。
  • PDERR:编程错误,试图对内容不是0xffff的地址编程时,硬件设置为1,写入1时可以清除。在进行编程操作之前,先清除FLASH_CR寄存器的STRT位。
  • BSY:忙,指示闪存操作正在进行。闪存操作开始时,该位置1,操作结束或发生错误时,清0。

闪存地址寄存器:FLASH_AR
在这里插入图片描述

这些位由硬件修改为当前/最后使用的地址。在页擦除时,软件必须修改这个寄存器以指定要擦除的页。

位31~0:FAR:闪存地址,当进行编程时选择要编程的地址,当进行页擦除时选择要擦除的页,当FLASH_SR的BSY位为1时,不能写这个寄存器。

相关文章:

STM32 Flash学习(一)

STM32 FLASH简介 不同型号的STM32,其Flash容量也不同。 MiniSTM32开发板选择的STM32F103RCT6的FLASH容量为256K字节,属于大容量产品。 STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分组成。 主存储器,该部分…...

Spring中IOC容器常用的接口和具体的实现类

在Spring框架没有出现之前,在Java语言中,程序员们创建对象一般都是通过关键字new来完成,那时流行一句话“万物即可new,包括女朋友”。但是这种创建对象的方式维护成本很高,而且对于类之间的相互关联关系很不友好。鉴于…...

【MySQL】索引特性

​🌠 作者:阿亮joy. 🎆专栏:《零基础入门MySQL》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉没…...

【深度学习笔记】动量梯度下降法

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记,视频由网易云课堂与 deeplearning.ai 联合出品,主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习,视频的链接如下: 神经网络和…...

《TCP IP网络编程》第十二章

第 12 章 I/O 复用 12.1 基于 I/O 复用的服务器端 多进程服务端的缺点和解决方法: 为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的一种方案,但并非十全十美,因为创建进程要付出很大的代价。…...

基于CNN卷积神经网络的调制信号识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1. 卷积神经网络(CNN) 2. 调制信号识别 3.实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 % 构建调制类型…...

正则,JS:this,同步异步,原型链笔记整理

一 正则表达式 正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本 正则表达式可以用于以下常见操作: 匹配&…...

【NOIP】小鱼的数字游戏题解

author:&Carlton tag:递归,栈 topic:【NOIP】小鱼的数字游戏题解 language:C website:洛谷 date:2023年7月29日 目录 我的题解思路 优化 别人的优秀思路: 我的题解思路 题…...

算法的时间复杂度、空间复杂度如何比较?

目录 一、时间复杂度BigO 大O的渐进表示法: 例题一: 例题2: 例题3:冒泡排序的时间复杂度 例题4:二分查找的时间复杂度 书写对数的讲究: 例题5: 实例6: 利用时间复杂度解决编…...

We are the Lights 2023牛客暑期多校训练营4-L

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有n*m盏灯&#xff0c;q次操作&#xff0c;每次可以将一整行或一整列的等打开或关闭 1<n,m<1e6;1<q<1e6 思路&#xff1a;对于同一行或者同一列来说&#xff0c;只要最后一次操作时开或者关&#xff0…...

ant-design-vue中table组件使用customRender渲染v-html

ant-design-vue遇到table中列表数据需要高亮渲染 1、customRender可以使用&#xff0c;但是使用v-html发现不生效还报错 const columns [title: name,dataIndex: name,customRender: (val, row) > {return <span v-html{val}></span>} ]2、customeRender函数…...

若依框架实现后端防止用户重复点击

若依框架实现后端防止用户重复点击 基于自定义注解、切面、Redis实现 1. 添加自定义注解&#xff1a; 代码放置位置&#xff1a;com/ruoyi/common/annotation/RepeatClick.java time: 时间默认0; unit&#xff1a;单位默认 秒; key: 默认空字符串 package com.ruoyi.fra…...

PCA对手写数字数据集的降维

手写数字的数据集结构为(42000, 784),用KNN跑一次半小时,得到准确率在96.6%上下,用随机森林跑一次12秒,准确率在93.8%,虽然KNN效果好,但由于数据量太大,KNN计算太缓慢,所以我们不得不选用随机森林。我们使用了各种技术对手写数据集进行特征选择,最后使用嵌入 法Select…...

Python入门【变量的作用域(全局变量和局部变量)、参数的传递、浅拷贝和深拷贝、参数的几种类型 】(十一)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…...

下级平台级联安防视频汇聚融合EasyCVR平台,层级显示不正确是什么原因?

视频汇聚平台安防监控EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等…...

vue : 无法加载文件 C:\Users\jianfei\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。...

背景 在新电脑上配置vue环境 PS E:\CODE_PROJ\myvue\vue23\P61_使用脚手架\vue_test> npm install -g vue/cli npm WARN deprecated source-map-url0.4.1: See https://github.com/lydell/source-map-url#deprecated npm WARN deprecated urix0.1.0: Please see https://git…...

godot引擎c++源码深度解析系列二

记录每次研究源码的突破&#xff0c;今天已经将打字练习的功能完成了一个基本模型&#xff0c;先来看下运行效果。 godot源码增加打字练习的demo 这个里面需要研究以下c的控件页面的开发和熟悉&#xff0c;毕竟好久没有使用c了&#xff0c;先来看以下代码吧。 //第一排 显示文本…...

专才or 通才

前言 不知道大家有没有这样的感觉&#xff0c;现在的工作专业化程度越来越高&#xff0c;而且是细分方向越来越小。IT领域分到你是计算里面的数据库或者了流式计算引擎&#xff0c;或者是协议存储还是KV存储引擎。 专业化的优势 专业化的程度带来了一个好处就是你在这个领域…...

【小白必看】Python爬虫实战之批量下载女神图片并保存到本地

文章目录 前言运行结果部分图片1. 引入所需库2. 发送请求获取网页内容3. 解析网页内容并提取图片地址和名称4. 下载并保存图片完整代码关键代码讲解 结束语 前言 爬取网络上的图片是一种常见的需求&#xff0c;它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使…...

道本科技||全面建立国有企业合规管理体系

为全面深化国有企业法治建设&#xff0c;不断加强合规管理&#xff0c;防控合规风险&#xff0c;保障企业稳健发展&#xff0c;近日&#xff0c;市国资委印发《常州市市属国有企业合规管理办法&#xff08;试行&#xff09;》&#xff08;以下简称《办法》&#xff09;&#xf…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...