STM32读写内部Flash

内存映射

在这里插入图片描述
stm32的flash起始地址为0x0800 0000,结束地址为0x0800 0000加上芯片实际的Flash大小,不同芯片Flash大小不同,RAM同理。

对于STM32F103RCT6,Flash256KB,所以结束地址为0x0803 ffff。

Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失。
RAM可以理解为内存,用来存储代码运行时的数据,变量等等,掉电数据丢失。

STM32将外设等映射为地址的形式,对地址的操作就是对外设的操作。

stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。

一般情况下,程序文件是从0x0800 0000地址写入,这个是STM32开始执行的地方,0x0800 0004是STM32的中断向量表的起始地址。

在使用keil进行编写程序时,其编程地址的设置一般是:
在这里插入图片描述
程序的写入地址从0x0800 0000开始的,其大小为0x40000也就是256K的空间,换句话说就是告诉编译器Flash的空间是从0x0800 0000~0x0804 0000,RAM的地址从0x2000 0000开始,大小为48KB。

M3复位后,从0x0800 0004取出复位中断的地址,并且跳转到复位中断程序,中断执行完之后会跳到main函数,main函数里面一般是一个死循环,进去后就不会再退出,当有中断发生的时候,M3将PC指针强制跳转回中断向量表,然后根据中断源进入对应的中断函数,执行完中断函数之后,再次返回main函数。

内部Flash的构成

在这里插入图片描述

  • 主存储器:一般说STM32内部FLASH的时候,都是指这个主存储器区域存储用户应用程序的空间,芯片型号说明中的 1M FLASH、 2M FLASH 都是指这个区域的大小。与其它 FLASH 一样,在写入数据前,要先按扇区擦除。
  • 系统存储区:系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,负责实现串口、USB以及CAN等ISP烧录功能。
  • OTP区域:One Time Program,只能写入一次的存储区域,容量为512字节,写入后数据就无法再更改,OTP常用于存储应用程序的加密秘钥。
  • 选项字节:选项字节用于配置 FLASH 的读写保护、电源管理中的 BOR 级别、软件/硬件看门狗等功能,这部分共 32 字节。可以通过修改 FLASH 的选项控制寄存器修改。

对内部Flash的写入过程

  1. 解锁(固定的KEY值)
    往FLASH秘钥寄存器FLASH_KEYR中写入KEY1=0x45670123
    再往FLASH密钥寄存器FLASH_KEYR中写入KEY2=0xCDEF89AB
  2. 数据操作位数:大部分应用场合都是32位的宽度。
  3. 擦除扇区
    在写入新的数据前,需要先擦除存储区域,STM32提供了扇区擦除指令和整个FLASH擦除质量。
    (1) 检查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以确认当前未执行任何
    Flash 操作;
    (2) 在 FLASH_CR 寄存器中,将“激活扇区擦除寄存器位 SER ”置 1,并设置“扇
    区编号寄存器位 SNB”,选择要擦除的扇区;
    (3) 将 FLASH_CR 寄存器中的“开始擦除寄存器位 STRT ”置 1,开始擦除;
    (4) 等待 BSY 位被清零时,表示擦除完成。
  4. 写入数据
    擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还还需要配置一系列的寄存器,步骤如下:
    (1) 检查 FLASH_SR 中的 BSY 位,以确认当前未执行任何其它的内部 Flash 操作;
    (2) 将 FLASH_CR 寄存器中的 “激活编程寄存器位 PG” 置 1;
    (3) 针对所需存储器地址(主存储器块或 OTP 区域内)执行数据写入操作;
    (4) 等待 BSY 位被清零时,表示写入完成。

查看工程内存的分布

由于内部 FLASH 本身存储有程序数据,若不是有意删除某段程序代码,一般不应修改程序空间的内容,在使用内部FLASH存储其他数据前需要了解哪一些空间已经写入了程序代码。

通过查询应用程序编译时产生的“*.map”后缀文件,打开map文件后,查看文件最后部分的区域,Memory Map of the image

在这里插入图片描述

这段代码提供了一张镜像的内存映射(Memory Map),其中包含了入口点地址以及主要的加载和执行区域信息。

镜像的入口点(Entry point)地址是0x08000131。

加载区域(Load Region) LR_IROM1(基地址:0x08000000,大小:0x00001cec,最大大小:0x00040000)用于存放程序代码和只读数据。它是一个绝对地址的加载区域。

执行区域(Execution Region) ER_IROM1(基地址:0x08000000,大小:0x00001cd0,最大大小:0x00040000)用于存放实际执行的代码。它也是一个绝对地址的执行区域。

这个内存映射中的加载和执行区域都是基于基地址0x0800 0000,并且大小相等。意味着整个镜像都被加载到该地址范围,并且执行也发生在相同的地址范围内。

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

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

相关文章

Macbook M1编译安装Java OpenCV

OpenCV-4.8.0编辑安装 查询编译依赖 brew info opencv确保所有需要模块都打上了✔,未打✔的需要使用brew进行安装 下载OpenCV源码 在此处下载OpenCV源代码,选择Source,点击此处下载opencv_contrib-4.8.0 或者使用如下命令,通…

集装箱装卸作业相关的知识-Part1

1.角件 Corner Fitting of Container or called Corner Casting. there are eigth of it of one container. 国家标准|GB/T 1835-2006https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcnoD35857F2200FA115CAA217A114F5EF12 中国的国标:GB/T 1835-2006《系列1集…

代码随想录算法训练营day51 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

题目链接309.最佳买卖股票时机含冷冻期 class Solution {public int maxProfit(int[] prices) {if (prices null || prices.length < 2) {return 0;}int[][] dp new int[prices.length][2];dp[0][0] -prices[0];dp[0][1] 0;dp[1][0] Math.max(dp[0][0], dp[0][1] - pr…

2023最新ChatGPT商业运营版网站源码+支持ChatGPT4.0+GPT联网+支持ai绘画(Midjourney)+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…

微服务的各种边界在架构演进中的作用

演进式架构 在微服务设计和实施的过程中&#xff0c;很多人认为&#xff1a;“将单体拆分成多少个微服务&#xff0c;是微服务的设计重点。”可事实真的是这样吗&#xff1f;其实并非如此&#xff01; Martin Fowler 在提出微服务时&#xff0c;他提到了微服务的一个重要特征—…

写论文需要注意的点(持续更新)

引言 写论文投稿的时候遇到很多评审给的好的意见&#xff0c;记录下来&#xff0c;在下次写论文的时候谨记这些点&#xff0c;不再犯错 意见 写文章的时候要引用最新的文献做实验的时候将数据集获取的地址和方式记录下来&#xff0c;在文章中标注出来并不是一定要在所有数据…

iptables-netfilter基础

iptables-netfilter基础 课堂笔记 iptables Firewall&#xff1a;防火墙 隔离工具。区别于建筑防火墙。工作于主机或网络边缘&#xff0c;对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测&#xff0c;对于能够被规则匹配到的报文作出相应处理的组件&#xff…

HCIA练习2

目录 第一步 启动eNSP&#xff0c;搭建如图所示的拓扑结构 第二步 进行子网的划分 ​第三步 从第二步划分的16个网段中&#xff0c;选择14个网段进行使用 第四步 对路由器各个端口进行IP配置 第五步 对每个路由器的环回接口进行配置 第六步 对路由器进行静态路由配…

mac如何强制刷新chorm浏览器

在 macOS 上&#xff0c;你可以使用以下方法来强制刷新 Chrome 浏览器&#xff1a; 使用快捷键&#xff1a;按住 Shift 键并同时点击浏览器刷新按钮。这会强制浏览器绕过缓存并重新加载当前页面。 使用开发者工具&#xff1a;按下 Option Command I 快捷键&#xff08;或通过…

视觉套件专项活动!与飞桨技术专家一起提升技术实力,更多荣誉奖励等你领取

作为中国最早开源的深度学习框架&#xff0c;飞桨深度践行开源理念&#xff0c;开放拥抱社区&#xff0c;重视生态构建&#xff0c;与开发者和生态伙伴共成长&#xff0c;已成为国内综合竞争力第一的产业级深度学习平台。截至目前&#xff0c;飞桨已凝聚750万名开发者。 在飞桨…

如何在工作中利用Prompt高效使用ChatGPT

导读 AI 不是来替代你的&#xff0c;是来帮助你更好工作。用better prompt使用chatgpt&#xff0c;替换搜索引擎&#xff0c;让你了解如何在工作中利用Prompt高效使用ChatGPT。 01背景 现在 GPT 已经开启了人工智能狂潮&#xff0c;不过是IT圈&#xff0c;还是金融圈。 一开…

C++(MFC)调用Python

环境&#xff1a; phyton版本&#xff1a;3.10 VS版本&#xff1a;VS2017 包含文件头&#xff1a;Python\Python310\include 包含库文件&#xff1a;Python\Python310\libs 程序运行期间&#xff0c;以下函数只需要调用一次即可&#xff0c;重复调用会导致崩溃 void Initial…

rust reborrow - 重借用

两个知识点: 第一:对于不可变借用&T,它的传递属于Copy语意。对于可变借用&mut T它的传递属于Move语意或reborrow。 第二:可变引用在同一个时刻只能拥有一个,但是有一个重借用(reborrow)的方式,可以让借用重新获得可变引用。 下面为reborrow的三种方式 明确写出…

Rust之枚举与模式匹配

枚举类型&#xff0c;简称枚举&#xff0c;允许列举所有可能的值来定义一个类型。 1、定义枚举&#xff1a; 枚举类型&#xff1a;已知所有可能的值&#xff0c;并且所有值的出现是互斥的&#xff0c;即每次只能取一种可能的值&#xff0c;才使用枚举类型。 示例&#xff1a;…

CNNdebug尝试

这算是啥问题&#xff1f;&#xff1f; 接着根据群里大佬提供的指示&#xff0c;将train和validate中的nums_work改成0即可 此处因为数据已经打乱了&#xff0c;所以在这里就不用打乱数据&#xff0c;把shuffle True修改成为False 后面查看指定目录下&#xff0c;竟然没有这个…

python怎么实现tcp和udp连接

目录 什么是tcp连接 什么是udp连接 python怎么实现tcp和udp连接 什么是tcp连接 TCP&#xff08;Transmission Control Protocol&#xff09;连接是一种网络连接&#xff0c;它提供了可靠的、面向连接的数据传输服务。 在TCP连接中&#xff0c;通信的两端&#xff08;客户端和…

信息与通信工程面试准备——专业知识提问

1.无线通信&#xff1a;依靠电磁波在空间传播以传输信息。 2.通信的目的&#xff1a;传输信息。 3.通信系统&#xff1a;将信息从信源发送到一个或多个目的地。 4.本书中通信一般指电信&#xff1a;利用电信号传输信息&#xff08;光通信属于电信&#xff0c;因为光也是一种…

华为数通HCIP-OSPF路由计算

路由协议 作用&#xff1a;用于路由设备学习非直连路由&#xff1b; 动态路由协议&#xff1a;使路由设备自动学习到非直连路由&#xff1b; 分类&#xff1a; 按照算法分类&#xff1a; 1、距离矢量路由协议&#xff1b;&#xff08;RIP、BGP&#xff09; 只交互路由信息…

CTFSHOW web 信息收集

web入门的刷题 web1 教我们多看看源代码 web2 抓包 web3 抓包 web4 robots.txt robots.txt web5 phps源代码泄露 phps 就是php的源代码 用户无法访问 php 只可以通过phps来访问 web6 源代码备份 web7 git web8 svn web9 swp /index.php.swp web10 cookie web11 查域名…

电商-订单模块

电商-订单模块 流程思维图表结构支付中心流程 流程思维图 表结构 支付中心 流程