STM32的启动过程

STM32开发项目:STM32F407的BootLoader程序 日期 作者 版本 说明 2020.11.03 Tao V0.0 完成主体内容的撰写 目录BootLoader程序介绍源码实现源文件stm32f4_flash.ld使用指南设置用户程序下载位置(stm32f4_flash.ld)修改中断向量表偏移量 BootLoader程序介绍 BootLoader其实就是一段启动程序,它在芯片启动的时候首先被执行,它可以用来做一些硬件的初始化,当初始化完成之后跳转到对应的应用程序中去。例如,我们可以将Flash分为两个区,一个是启动程序区(0x0800 ... 阅读详情

当运行main函数的时候,芯片不是直接执行main函数的,还有一个启动的过程

M3的启动方式由boot0和boot1选择,可以有三种启动方式


最常用的应该是第一种,就是将程序存储在片内的flash上,掉电后程序不会消失。

boot引脚的设置不同,芯片复位后起始地址就不同,选择从flash启动的时候,其复位地址就是0x08000000,Cortex-M3内核规定,起始地址必须放置堆顶指针,也就是MSP,所以0x08000000-0x08000004放置的是堆顶指针,0x080000004就是中断向量表的入口地址,系统复位后,会自动从起始地址的下一个32bit后边取出中断向量表的起始地址,并且进入复位中断,执行完复位中断后跳转到main函数执行程序。

至于为什么flash的起始地址是0x08000000,是因为芯片进行了地址映射,就是将0x08000000映射到了0x00000000上边,同时0x08000000还保持这访问功能,也就是说0x0800000有两个访问地址,一个是本身,另一个就是0x00000000。

如果选择了RAM作为启动方式,那么就是将0x20000000映射到0x0000000上边,原地址同样有访问功能


STM32的启动地址是0x08000000还是0x00000000? 对于CPU来说它是永远从0x00000000地址去加载执行程序的,然后单片机会通过Boot管脚的配置去将Main FLASH(0x0800 0000)重映射或者芯片出厂自带的Bootloader(0x1FFF 0000)重映射,故而代码是下载到 0x80000000 往后的存储空间中,却说运行又是从 0x00000000地址运行的。从0x2000 0000到0x2000 xxxx即为程序所运行的范围,该段内存分布为:RW段、ZI段:其中RW段为可读写的非0数据段,ZI段包括了0数据段、堆区、栈区。 阅读详情

相关推荐

STM32启动过程分析

1. 程序和数据在Flash和SRAM上的存储结构 在讲解 STM32 启动过程之前,我们先来了解一下 STM32 的程序和数据在 Flash 和 SRAM 上到底是如何存储的,因为有了这方面的知识之后,非常有助于我们理解 STM32 启动过程中还做了哪些隐藏的工作。关于详细的程序和数据存储分布信息,我们可以从Keil生成的 .map 文件中得到,要生成 .map 文件操作如下: 1.1 STM32的程序在flash上的存储结构 STM32 的程序在 Flash 上的存储结构如下图所示: 栈顶指针 M

luobeihai的博客 7789

如何修改stm32起始执行地址

实例更改stm32起始执行地址为0x08010000,使用cubemx 生成工程,配置好串口1和时钟, 修改要点: 1,将icf文件中的__ICFEDIT_intvec_start__从默认的0x08000000改为0x08010000 2,VECT_TAB_OFFSET改为0x10000 全局查找VECT_TAB_OFFSET,或者从启动s文件中的Reset_Handler找到SystemInit,VECT_TAB_OFFSET就在SystemInit函数的末尾如图 找到定义,.

Eric__zh的博客 1万+

STM32的启动过程分析

STM32的启动过程分析

wheat_in_winner的博客 1万+

解析 STM32 的启动过程

解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自

Wizzy90的博客 730

STM32的启动过程 — startup_xxxx

无论是是何种MCU,从简单的51,MSP430,到ARM9,ARM11,A7 都必须有启动文件,因为对于嵌入式开发,绝大部分情况都是使用C语言,而C语言一般都是从main 函数开始,但是对于MCU来说,他是如何找到并执行main函数的,就需要用到“启动文件”,就是各种 startup_xxxx.s 文件。启动文件是使用机器认识的汇编语言,经过一些必要的配置,最终能够调用 main 函数,使得用户程序能够在 MCU上正常运行起来的必备文件。

2401_89225025的博客 1438

嵌入式开发八:STM32启动过程分析

使用一个STM32芯片,对于内存而言有两个直观的指标就是 RAM 大小,FLASH大小,那么着两个大小意味着什么?怎么去理解这两个内存,那就得从什么是Flash,什么是RAM说起。⾸先,对于嵌入式开发,⼀般使⽤的是C语言开发。⽽我们知道C语言都是从main函数开始 的,因此,对于处理器来说它是如何找到并执行main函数的,就需要用到启动文件,就是各种 startup_xxx.s文件。对于我们STM32f407来说其启动⽂件为:startup_stm32f40_41xx.s。

weixin_47040031的博客 2184

startup_stm32f407xx.s

使用单片机STM32执行的第一个程序是startup_stm32f407xx.s 指令名称 含义 EQU 给数字常量取一个符号名,相当于C语言中的define AREA 汇编一个新的代码段或者数据段 SPACE 分配内存空间 PRESERVE8 当前文件堆栈需按照8字节对齐 EXPORT 声明一个具有全局属性的标号,可被外部文件使用 IMPORT 声明一个来自外...

kayshi的博客 2113

在KEIL下Cortex-M3更改FLASH启动和调试地址的方法

该技术手册由本人亲自在STM32F103ZET6系统上测试成功,开发人员只需仔细阅读步骤实施即可。

STM32 芯片启动过程

下面主要讲解从上电复位到 main 函数的过程。初始化中断向量表配置系统时钟调用 C 库函数_main初始化用户堆栈,然后进入main函数至此,启动过程圆满结束!

Projectsauron 的博客 3万+

ArcGIS 10.2.2自带Python 2.7.5环境配置全攻略:从pip安装到gdal、arcpy调用

本文详细指导如何在ArcGIS 10.2.2自带的Python 2.7.5环境中进行高效配置。核心内容包括安装pip包管理器、部署gdal等关键地理数据处理库,并确保arcpy模块的无缝调用。通过解决路径配置与PyCharm集成问题,帮助用户在此经典环境中构建稳定、兼容的地理信息自动化工作流,有效连接ArcGIS桌面功能与Python脚本编程。

moon9的博客 767

zynq+LWIP 裸机双网口实现(MIO+EMIO)+程序下载

芯片型号: ZYNQ: XC7Z010clg400开发软件:Vivado2022 + Xilinx Vitis 2022网卡芯片:RTL8211FDI(需要根据网口芯片型号修改对应的硬件配置代码。

thinking in 小宇宙 3405

stm32启动过程解析startup启动文件

复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。总结:上面的每一种启动方式我都描述了“xxx的起始地址被重映射到了0x00000000地址,从而代码从xxx开始启动”,如下图是STM32F4xx中文参考手册中的图,可以看到类似的表述。

tao_sc的博客 3247

CamoFox MCP:让AI助手隐身操作浏览器的反检测自动化实战

浏览器自动化是提升工作效率和实现数据采集的关键技术,其核心原理在于通过程序脚本模拟人类在网页上的交互行为。传统方案如Selenium或Playwright虽功能强大,但需要开发者编写复杂脚本并处理反爬机制。随着AI Agent技术的发展,自然语言驱动的自动化成为新趋势,它能将任务规划与逻辑判断交由AI处理,大幅降低使用门槛。Model Context Protocol(MCP)作为连接AI与外部工具的标准协议,在此场景下价值凸显,它使得AI助手能直接调用丰富的浏览器操作工具。CamoFox MCP创新性地将

weixin_42551967的博客 724

STM32启动过程概述

STM32 的启动过程是一个系统化的过程,涵盖了硬件初始化、时钟配置、外设配置等多个方面。通过从复位向量到进入main()函数的多步操作,确保了系统的各个部件和外设准备好为用户应用提供服务。理解这一过程对开发 STM32 应用非常重要,尤其是在调试、优化启动时间和进行系统级开发时。

gdragen_的博客 1458

【DaVinci Developer专题】-41-APP SWC如何读取写入NVM Block数据

APP SWC Port如何Read读取/Write写入NVM Block数据; DaVinci Developer中的Calibration Parameter/Per-Instance Memory/Service Need如何配置。

「汽车电子助手」的博客 4468

人工智能 (Artificial Intelligence, AI) 原理与代码实例讲解

人工智能 (AI) 机器学习 (Machine Learning) 深度学习 (Deep Learning) 算法 模型 代码实例 应用场景 1. 背景介绍 人工智能 (Artificial Intelligence, AI) 作为一项前沿科技,近年来发展迅速,已渗透到生活的方方面面

AI架构师小马 1226

详解 STM32的上电启动过程

先说启动文件 我们正常在操作一款单片机的时候,都是从main函数开始进行编程的,但是单片机上电是从main函数开始执行的吗?答案当然是否定的,在main函数之前单片机最先执行的是硬件设置SP、PC然后是“启动文件”,一般主要是项目文件里面的startup_xxxxx.s文件。其实这个就是我们常说的Bootloader。 其实不光STM32系列单片机是这样,我们接触的NXP的微控制器、TI的MSP4...

绿色羽毛 1万+

有限元分析-静力学分析-与分析解对比-——以阶梯轴的静力分析为例——静态结构分析

150mm,a=300mm{a=300mm}a=300mm,b=200mm{b=200mm}b=200mm,L=1000mm{L=1000mm}L=1000mm,F=300kN{F=300kN}F=300kN,材料为45,弹性模量E=2.1e11Pa{E=2.1e11Pa}E=2.1e11Pa,泊松比v=0.28{v=0.28}v=0.28,屈服应力δs=355MPa{δ_s=355MPa}δ。使用line body生成的模型,可以选择自动划分网格的,WB会将以梁单元将其划分完成,例如图2所示。

qq_15963745的博客 66

STM32启动过程浅析

当大家熟悉使用STM32之后,又有多少人了解到更深层的东西呢?今天就让我为大家带来STM32启动过程的解释

qq_74457525的博客 1126

python基础:工作会用到的90%的python代码都在这了(万字详解!)

Python 备忘单是 Python 3 编程语言的单页参考表 著名的“Hello World”程序在 Python 中的实现 Python 不能在没有赋值的情况下声明变量 变量可以存放不同类型的值 内置数据类型 序列指一批有序的元素,集合指一批无序且不重复的元素查看: 数据类型 查看: 字符串 查看: 列表 查看: 判断 查看: 循环 查看: 函数 查看: 文件处理 表示 x 和 y 的商, 表示 x 和 y 的底商,另见 StackOverflow f-字符串 (Python 3.6+) 查看

数据知道的博客 1万+

【ArcPy】用Python批量处理大规模地理数据的几何校正

在许多GIS应用中,尤其是在大规模地理数据处理时,几何校正(Geometric Correction)是一个至关重要的任务。它确保了不同来源的地理数据能够正确地对齐和匹配,从而为后续分析提供准确的基础。几何校正的常见应用包括遥感影像的地理配准、矢量数据的投影转换等。几何校正通常包括坐标转换、重采样等步骤。以下示例展示了如何使用arcpy的工具进行几何校正。"""实施几何校正:param input_layer: 输入待校正数据层。

陈书予 997

【STM32】STM32内存映射以及启动过程(超详细过程)

映射其实就是对应的意思。事实上存储器本身并不具备地址,将芯片理论上的地址分配给存储器,这就是存储器映射。STM32 的所有片内外设其实都是存储器,所以所有的这些存储器都需要被映射。 理论上**地址起始就是门牌号**,存储中的每个字节就是房间,存储器生产出来后,这些房间是没有地址的(门牌号),映射的过程其实就是将这些门牌号分配给这些房间,分配好后,每个门牌号只能访问自己的房间,没有被分配的地址就是保留地址,所谓保留地址的意思就是,没有对应实际存储空间。

涛涛子的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

STM32程序的启动过程

芯片上电以后会触发复位异常。并且会跳转到中断向量表特定偏移位置。获取里面的内容执行。触发异常->中断向量表->用户程序修改复位异常内的内容,就可以让处理器去执行我们指定的操作。国庆结束!下个假期就是元旦了,哇哇。

weixin_43920383的博客 2418

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

解析STM32的启动过程

 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译

Jim‘s Embedded 822

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

stm32--启动文件(.s)与启动过程

一、stm32系列芯片的种类和型号: startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s...

xys430381_1的专栏 1万+
上一篇: STM32的内存地址映射与IAP下载
下一篇: 关于Vs2012重新生成解决方案时提示exe访问被拒绝的处理方式
CallMeSumo
博客等级 码龄10年 82粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值