STM32的Flash映射双重机制
在STM32微控制器中,存在一个重要的内存映射特性:Flash存储器可以同时出现在两个不同的地址区域,而且可以通过重映射功能改变CPU启动时从哪个地址获取初始指令。
STM32的Flash映射双重机制
当描述"通常起始于地址0x00000000,用于存放Flash内容"以及"部分STM32允许将Flash映射到0x08000000"时,这指的是:
-
物理Flash位置:在STM32中,内部Flash的物理地址实际上是从0x08000000开始的。这个地址是Flash在内存中的"真实"位置。
-
启动地址映射:当处理器复位后,它会从地址0x00000000开始获取中断向量表和第一条执行指令。为了满足这个要求,STM32通过内部硬件机制将物理地址0x08000000开始的Flash内容"映射"(别名)到地址0x00000000。
-
灵活的启动配置:STM32允许将不同的内存区域映射到0x00000000地址,这使得处理器可以从不同的地方启动:
- Flash启动模式:将Flash(0x08000000)映射到0x00000000
- 系统存储器启动:将内部系统存储器(通常在0x1FFF0000附近)映射到0x00000000
- SRAM启动:将SRAM(0x20000000)映射到0x00000000
这种设计的实际意义
这种内存映射设计具有几个重要的优势:
-
引导加载程序支持:
- STM32的内部系统存储器包含一个出厂预编程的引导加载程序(Bootloader)
- 通过将系统存储器映射到0x00000000,可以执行这个引导程序,用于通过UART、USB等接口更新Flash
-
灵活的代码执行位置:
- 可以选择从SRAM执行代码,这在某些需要高执行速度的场景中非常有用
- 这也方便进行在线更新程序代码,新代码可以先下载到SRAM,然后重新映射执行
-
兼容性和安全性:
- 保证了ARM架构的兼容性(ARM架构要求从地址0开始执行)
- 物理Flash起始于0x08000000而非0x00000000,这增加了一定的保护性(防止某些意外的内存访问)
实际示例说明
假设我们有一个STM32F103微控制器,它有以下启动配置选项:
-
默认Flash启动模式:
- BOOT0引脚=0,BOOT1引脚=X(任意)
- 处理器从地址0x00000000开始执行
- 实际执行的是被映射到此处的物理地址0x08000000的Flash内容
- 中断向量表位于Flash的开始位置
-
系统存储器启动模式:
- BOOT0引脚=1,BOOT1引脚=0
- 处理器从地址0x00000000开始执行
- 实际执行的是被映射到此处的系统存储器内容(出厂预编程的引导加载程序)
- 这可以激活STM32的串行bootloader,用于通过UART烧写程序
-
SRAM启动模式:
- BOOT0引脚=1,BOOT1引脚=1
- 处理器从地址0x00000000开始执行
- 实际执行的是被映射到此处的SRAM内容
- 这要求预先通过调试接口将程序加载到SRAM中
实际应用场景
-
固件更新:
将系统内存重映射到0x00000000,执行内置的引导程序,接收新固件并写入Flash。 -
执行速度优化:
将时间关键的代码复制到SRAM执行,消除Flash访问等待状态的影响,同时可能重映射SRAM到0x00000000。 -
安全启动:
在Flash中实现多级引导程序,可以在启动时验证应用程序的完整性和真实性,必要时通过重映射机制加载备份程序。
总而言之,这种地址映射机制增加了STM32的灵活性和功能性,是它作为一个强大微控制器平台的重要特性之一。
相关文章:
STM32的Flash映射双重机制
在STM32微控制器中,存在一个重要的内存映射特性:Flash存储器可以同时出现在两个不同的地址区域,而且可以通过重映射功能改变CPU启动时从哪个地址获取初始指令。 STM32的Flash映射双重机制 当描述"通常起始于地址0x00000000,…...
简单了解跨域问题
什么是跨域? 跨域是浏览器基于同源策略的安全机制。 如何两个请求之间,域名,端口,协议三者中有任意一个不同,就会产生跨域问题。 跨域的解决方案 1. CORS(跨源资源共享) 后端通过设置响应头声…...
sql学习笔记(四)
今天看到一个sql题,“近30天,******”,这里需要用到一个函数,date_add,其作用是在指定日期基础上添加一个时间间隔。 语法(以mysql为例): DATE_ADD(date, INTERVAL value unit) d…...
基于 Java 的实现前端组装查询语句,后端直接执行查询方案,涵盖前端和后端的设计思路
1. 前端设计 前端负责根据用户输入或交互条件,动态生成查询参数,并通过 HTTP 请求发送到后端。 前端逻辑: 提供用户界面(如表单、筛选器等),让用户选择查询条件。将用户选择的条件组装成 JSON 格式的查询参数。发送 HTTP 请求(如 POST 或 GET)到后端。示例: 假设用…...
反射与注解实现动态功能扩展案例-插件系统
学海无涯,志当存远。燃心砺志,奋进不辍。 愿诸君得此鸡汤,如沐春风,事业有成。 若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌! 开发一个需要高度扩展性的应用,比如Web框…...
auto(x) decay copy
该提案为auto又增加了两个新语法:auto(x) 和auto{x}。两个作用一样,只是写法不同,都 是为x 创建一份拷贝。 为什么需要这么个东西?看一个例子: void bar(const auto&);void foo(const auto& param) {auto co…...
基于STM32、HAL库的DS2411R安全验证及加密芯片驱动程序设计
一、简介: DS2411R是Maxim Integrated(现为Analog Devices)生产的一款1-Wire硅序列号芯片,具有以下特点: 64位唯一ROM序列号(包括8位家族码、48位序列号和8位CRC校验码) 工作电压范围:2.8V至5.25V 工作温度范围:-40C至+85C 采用TO-92或SOT-223封装 通过1-Wire协议通信…...
疫苗接种体系进入“全生命周期”时代:公共卫生治理再提速
疫苗接种体系进入“全生命周期”时代:公共卫生治理再提速 在防控重大传染病的国家公共卫生战略中,疫苗接种始终处于基础性、先导性地位。2025年4月25日是第39个全国儿童预防接种日,活动主题为“打疫苗、防疾病、保健康”。近年来,…...
zynq 7010 PS 串口打印
前言 之前写过一篇文章《zynq 7010 PL 点灯例程》,介绍的是 zynq PL 部分的使用,今天这篇文章则是介绍 zynq PS 部分的使用。 在此之前,先总结点题外话 PL 编程,核心思想是生成 bitstream 文件,加载到 FPGA 运行PS …...
【补题】ACPC Kickoff 2025 F. Kinan The Bank Robber
题意:给出长度为n的序列,接下来给出了两个包裹,你可以选择把数字放进这两个包裹当中,要求你放的的方式,最终会让包裹内的数字双双互质,请你给出你的放法,如果没有输出-1 思路: 1.包…...
局域网传文件——基于flask实现
项目地址 git clone gitgitee.com:xhdx/co_-shared_-doc_in_-local_-net.git 所需python包 flask2.2.3 markdown3.4.1 bleach5.0.1 通过局域网的方式实现文件夹共享,共享的文件会放在uploads这个文件夹下: 运行界面: 包括预览、删除、下载等…...
苍穹外卖10
WebSocket WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信----浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短链接 WebSocke…...
第一天 车联网定义、发展历程与生态体系
前言 车联网(Internet of Vehicles, IoV)作为物联网(IoT)在汽车领域的延伸,正在彻底改变人们的出行方式。无论是自动驾驶、远程诊断,还是实时交通优化,车联网技术都扮演着核心角色。本文将从零…...
大模型(LLMs)强化学习—— PPO
一、大语言模型RLHF中的PPO主要分哪些步骤? 二、举例描述一下 大语言模型的RLHF? 三、大语言模型RLHF 采样篇 什么是 PPO 中 采样过程?介绍一下 PPO 中 采样策略?PPO 中 采样策略中,如何评估“收益”? …...
麻衣相法【麻衣相士】开篇
好久没有发布新的文章了,主要最近一方面没看书,时间基本都用来打游戏了;另一方面看的几本书实在是看不懂,就更不能写上来了。不过今天看到了《麻衣相法》这本书,就又点燃了本人的兴趣,以后失业了,可以摆个小摊子谋生! 话不多说,先把这本书开始的针对人的面部部位进行各…...
vLLM技术解析:大语言模型推理服务的性能革新引擎
vLLM大模型 vLLM(Vectorized Large Language Model Serving System)是由加州大学伯克利分校计算机系统研究团队开发的下一代大语言模型推理服务系统。作为专为现代化AI部署设计的开源框架,该系统通过突破性的内存架构创新和计算流程优化&…...
《无刷空心杯电机减速机选型及行业发展趋势》
无刷空心杯电机作为高精度驱动系统的核心部件,通常需搭配减速机以实现低转速、高扭矩输出。以下是当前主流的减速机类型、市场占比、参数对比及优劣势分析,结合行业数据与典型应用场景展开说明: 一、主流减速机类型及市场占比 1. 行星减速机 市场占比:约 45%-55%(工业自…...
Java锁的升级流程详解:无锁、偏向锁、轻量级锁、重量级锁
在Java中,为了在多线程并发场景下既保证线程安全,又尽可能提高性能,JVM针对synchronized实现了锁的优化升级机制。 锁可以从无锁逐步升级到偏向锁、轻量级锁,最后是重量级锁。 话不多说,发车! 一、无锁&am…...
terraform local-exec与remote-exec详解
在 Terraform 中,local-exec 和 remote-exec 是两种常用的 provisioner(资源调配器),用于在资源创建前后执行脚本或命令。它们的核心区别在于执行位置:local-exec 在运行 Terraform 的本地机器上执行命令,而…...
武装Burp Suite工具:APIKit插件_接口安全扫描.
武装Burp Suite工具:APIKit插件_接口安全扫描. API安全是指通过技术手段和管理措施保护应用程序接口(API)免受未授权访问、数据泄露或恶意攻击的防护体系,核心措施包括身份认证(如OAuth2.0/JWT)、权限控制…...
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记6
前言 经过前面几篇文章的介绍,已经完成了对于数据查询操作的介绍,接下来,本篇文章将介绍数据更新这一板块,包括插入数据、修改数据以及删除数据三种操作方法。 注:本文中所涉及的数据库前文中已经介绍(指…...
如何在idea中写spark程序
1. 安装配置 Java 和 Scala Java:确保已安装合适版本的 Java Development Kit(JDK),并配置好 JAVA_HOME 环境变量。Scala:由于 Spark 常用 Scala 语言编写,需安装 Scala 开发环境。可在 IDEA 中通过 Se…...
Linux428 chmod 0xxx 1xxx 2xxx 4xxx;umask;chown 属主属组 软件包rpm
sudo: 账户过期,或 PAM 配置缺少 sudo 使用的“account”节,联系您的系统管理员 这样子有没有用嘞 不行 为什么使用caozx26用户sudo修改了shop文件夹强制位,shop文件夹权限中不显示 成功了?真奇怪 查看文件夹权限用 -ld ch…...
基于强化学习的用于非刚性图像配准的引导式超声采集|文献速递-深度学习医疗AI最新文献
Title 题目 Guided ultrasound acquisition for nonrigid image registration usingreinforcement learning 基于强化学习的用于非刚性图像配准的引导式超声采集 01 文献速递介绍 超声成像通常用于引导手术和其他医疗程序,在这些过程中,临床医生会持…...
Shell脚本-嵌套循环应用案例
在Shell脚本编程中,嵌套循环是一种强大的工具,可以用于处理复杂的任务和数据结构。通过在一个循环内部再嵌套另一个循环,我们可以实现对多维数组、矩阵操作、文件处理等多种高级功能。本文将通过几个实际的应用案例来展示如何使用嵌套循环解决…...
QTableView复选框居中
目录 方法一:QSS方法2:自定义复选框委托类一、构造函数 CheckBoxDelegate()二、paint() 方法三、editorEvent() 方法四、关键设计要点五、扩展应用场景六、代码示例(补充) 方法一:QSS QTableView::indicator {position: relative…...
C语言教程(十八):C 语言共用体详解
一、共用体的定义 共用体的定义和结构体类似,使用 union 关键字,其基本语法如下: union 共用体名 { 数据类型 成员1; 数据类型 成员2; // 可以有更多成员 }; 以下是一个简单的共用体定义示例: union Data {int i;float f;char …...
企业办公系统开发如何重塑现代工作方式?
随着工作方式的革新,企业办公软件开发已成为提升组织效率的核心驱动力。从基础的文档处理到复杂的协同办公平台开发,现代办公系统正在彻底改变传统工作模式。本文将深入解析办公类软件的关键技术与发展趋势。 一、企业级办公系统开发的核心模块 专业的O…...
springboot 实现敏感信息脱敏
记录于2025年4月28号晚上--梧州少帅 1. 定义枚举类: public enum DesensitizeType {NAME, EMAIL } 2. 创建自定义注解: 用于标记需要脱敏的字段及其类型。 Retention(RetentionPolicy.RUNTIME) JacksonAnnotationsInside JsonSerialize(using Desen…...
JavaWeb学习打卡-Day5-Spring事务管理、SpringAOP
Spring事务管理 Transactional注解 位置:业务层(Service)的方法上、类上、接口上。作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务࿱…...
项目立项管理
项目立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可持续性等进行全面科学的综合分析,为项目决策提供客观依据的一种技术经济研究活动。 一般包括项目建议与…...
一文梳理业财融合在财务管理中的运用!
目录 一、业财融合在财务管理中的运用概括 二、促进财务决策科学化 1. 传统财务决策的局限性 2. 业财融合助力财务决策科学化 三、加强成本控制 1. 传统成本控制的不足 2. 业财融合实现精准成本管控 四、优化资金管理 1. 传统资金管理的问题 2. 业财融合优化资金配置…...
C#核心知识
委托 如何声明一个委托:通过 【delegate 返回值类型 委托名称】 的格式来定义 如何使用一个委托:使用new关键字,并传入和声明委托的构造相同的方法名,比如:new 委托名称(与委托的参数和返回值相同的一个方法名) 如何…...
[多彩数据结构] 笛卡尔树
[多彩数据结构] 笛卡尔树 定义 笛卡尔树,就是一棵树(废话)中存两个信息,为 ( w , i ) (w,i) (w,i)。其中 k w e i g h t , i i d kweight,iid kweight,iid。 即 w w w 存的是节点的值, i i i 存的是编号。 每…...
【Spark入门】Spark RDD基础:转换与动作操作深度解析
目录 1 RDD编程模型概述 1.1 RDD操作分类 2 常用转换操作详解 2.1 基本转换操作 2.2 键值对转换操作 2.3 复杂转换操作 3 动作操作触发机制 3.1 常见动作操作 3.2 动作操作性能对比 4 RDD执行机制深度解析 4.1 惰性求值原理 4.2 任务生成过程 5 性能优化实践 5.1 …...
一文了解 模型上下文协议(MCP)
MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的一项开放标准协议,旨在解决大型语言模型(LLM)与外部数据源和工具之间的通信问题。其核心目标是通过提供一个标准化的接口&…...
每日算法-250428
每日算法 - 2024年4月28日 记录今天完成的几道 LeetCode 算法题。 1877. 数组中最大数对和的最小值 题目描述: 思路 贪心策略。 解题过程 为了最小化所有数对和中的最大值,直观的想法是避免让两个较大的数相加。因此,最优策略是将数组中最小的元素…...
【“星瑞” O6 评测】 — CPU llama.cpp不同优化速度对比
前言 随着大模型应用场景的不断拓展,arm cpu 凭借其独特优势在大模型推理领域的重要性日益凸显。它在性能、功耗、架构适配等多方面发挥关键作用,推动大模型在不同场景落地 1. Kleidi AI 简介 Arm Kleidi 成为解决这些挑战的理想方案,它能…...
Redis 常见问题深度剖析与全方位解决方案指南
Redis 是一款广泛使用的开源内存数据库,在实际应用中常会遇到以下一些常见问题: 1.内存占用问题 问题描述:随着数据量的不断增加,Redis 占用的内存可能会超出预期,导致服务器内存不足,影响系统的稳定性和…...
在g2o图优化框架中,顶点(Vertex)和边(Edge)的定义与功能的区别
在g2o图优化框架中,顶点(Vertex)和边(Edge)是构建优化问题的核心组件,两者的定义与功能存在以下关键区别: 1. 作用与本质差异 顶点(Vertex) 代表待优化的变量,例如: 位姿(如VertexSE3Expmap表示3D位姿,包含平移和旋转)空间点坐标(如VertexPointXYZ表示3D点)参数…...
stm32wb55rg (2) 阅读资料手册
阅读资料是嵌入式开发的必备技能,能够从资料中找到自己想要的技术信息,才是最为核心的技术能力。 nucleowb55rg板子的MCU为stm32wb55rg,这块板子的资料有很多,但有些内容可以边用边读,有些内容有必要预先掌握下。 下面…...
基于Python的携程国际机票价格抓取与分析
一、项目背景与目标 携程作为中国领先的在线旅行服务平台,提供了丰富的机票预订服务。其国际机票价格受多种因素影响,包括季节、节假日、航班时刻等。通过抓取携程国际机票价格数据,我们可以进行价格趋势分析、性价比评估以及旅行规划建议等…...
【LLM开发】Unigram算法
Unigram算法 参考:Unigram算法解释 参考书籍:How Can We Make Language Models Better at Handling the Diversity and Variability of Natural Languages Unigram 算法是一种基于概率的子词分词方法,与BPE算法、WordPiece算法不同ÿ…...
GD32F407单片机开发入门(十六)单片机IAP(在应用编程)详解及实战源码
文章目录 一.概要二.GD32F407VET6单片机IAP介绍1.GD32F407VET6单片机IAP基本原理2.GD32F407VET6单片机IAP基本流程3.Ymodem协议 三.配置一个BOOT工程四.配置一个APP工程五.工程源代码下载六.小结 一.概要 单片机上电或系统复位后,ARM Cortex-M4处理器先从0x0000 00…...
庙算兵棋推演AI开发初探(7-神经网络训练与评估概述)
前面我们提取了特征做了数据集、设计并实现了处理数据集的神经网络,接下来我们需要训练神经网络了,就是把数据对接好灌进去,训练后查看预测的和实际的结果是否一致——也就是训练与评估。 数据解析提取 数据编码为数据集 设计神经网络 -->…...
[实战] IRIG-B协议详解及Verilog实现(完整代码)
目录 IRIG-B(B码)协议详解及Verilog实现一、IRIG-B协议概述二、帧格式详细解析1. 码元类型与索引计数2. 时间编码字段3. 控制功能码元(CF)4. 纯二进制秒码(SBS) 三、编码与信号特性四、时间编码实现1. 时间参数转换2. 帧数据填充规…...
从传统制造到智能工厂:MES如何重塑电子制造业?
在“中国制造2025”战略的引领下,电子制造业正经历深刻变革。多品种小批量、工艺复杂度高、质量追溯严苛等需求日益凸显。由此,如何通过数字化手段实现生产透明化、质量可追溯和资源高效协同,成为行业转型的关键命题。 一、电子制造业转型痛…...
使用Curl进行本地MinIO的操作
前言 最近在做相关的项目中关于本地服务搭建和访问的技术验证,打进来最基本的数据访问,使用了C。可以进行:服务器的可用性检查、Bucket的创建、文件夹的创建、文件的上传、文件的下载、文件夹和Bucket的存在性检查等基本接口,对自…...
uniswap getTickAtSqrtPrice 方法解析
先上代码: function getTickAtSqrtPrice(uint160 sqrtPriceX96) internal pure returns (int24 tick) {unchecked {// Equivalent: if (sqrtPriceX96 < MIN_SQRT_PRICE || sqrtPriceX96 > MAX_SQRT_PRICE) revert InvalidSqrtPrice();// second inequality mu…...
qemu(3) -- qemu-user使用
1. 前言 qemu中有很多的特技,此处记录下qemu-arm的使用方式,简单来说qemu-system-xx用于虚拟整个设备,包括操作系统的运行环境,而qemu-xx仅虚拟Linux应用程序的环境,不涉及操作系统,应用程序的系统调用有宿…...