首页 > 其他分享 >【STM32芯片启动流程】——结合具体启动文件和hex文件分析

【STM32芯片启动流程】——结合具体启动文件和hex文件分析

时间:2024-07-18 22:27:34浏览次数:11  
标签:__ 文件 函数 启动 复位 hex 地址 main

一、前言

最近想把MCU相关的知识梳理一遍,希望加深自己对相关知识的理解,同时也作为备忘录提醒自己。首先是STM32的启动过程,理解这个过程是学习IAP和OTA功能以及深入stm32内核的基础。

二、总体流程介绍

1. 由boot引脚(boot0,boot1)选择启动模式;

2. 给SP、PC指针赋值;

3. 进入复位中断程序;

4. 进入main函数。

三、各个过程深入分析

1. 由boot引脚选择启动模式

stm32复位(上电复位、硬件复位、软件复位),会将复位后的起始地址和中断向量表重映射到其他地址,具体映射到哪个地址由boot0和boot1决定。具体映射关系如下图所示。

启动模式对应映射地址

其中最常用的启动模式就是映射到内部FLASH启动,这也是接下来重点介绍的模式。

映射到内部SRAM启动的使用场景比较少,代码在SRAM的执行速度较快,可运用在一些调试需频繁更新代码的场合。

映射到系统存储器一般是用于bootloader引导程序升级时使用,在程序本地升级和OTA升级时都会用。

2. 给SP、PC指针赋值

选择内部FLASH启动后,程序会将栈指针SP指向0x08000000,这个地址保存的是__initial_sp的地址,也就是程序栈顶地址,还会将程序计数器指针指向0x08000004,这个地址保存的是Reset_Handler的地址,这里结合具体的启动文件,map文件和hex文件来证实这一点。

启动文件的中断向量表
map文件和hex文件对比

这里从map文件中选取__initial_sp和Reset_Handler的地址与hex文件中最开始执行的指令比较,发现两者相等,即证明了程序的执行确实如上所述。这里有两个需要注意的点,stm32是小端模式,因此hex文件中的指令是按照字节的高位在地址高位,字节的低位在地址低位的规则。Reset_Handler的地址最后一位为啥是1,stm32的指令不都是16位和32位的嘛,其实这里涉及到指令集的问题,ARM cortexM3执行的是Thumb-2指令集,同时兼容16位的ARM指令和32位的Thumb的指令,为了区分两个指令集,规定指令最低位为1就是Thumb指令,为0就是ARM指令。

初始化SP、PC指针的示意图

3. 进入复位中断程序

上一步中PC指针指向了Reset_Handler函数,这也是程序复位后执行的第一条指令。

Reset_Handler函数内容

可以看到在Reset_Handler函数里主要执行了 SystemInit 和 __main 这两个函数,其中SystemInit函数是库函数,它的主要作用是初始化系统时钟(通过调用SetSysClock)。

__main 函数是标准的C库函数,当编译器发现了主程序中有main函数,就会自动创建__main函数。它的主要作用是初始化RW段和ZI段(通过调用__scatterload),初始化堆栈以及跳转到主程序的main函数(通过调用__rt_entry)。

4. 进入main函数

执行main函数中的while死循环,当中断到来时从中断向量表中找到对应的中断服务函数并执行。

四、结语

如有错误,欢迎评论区指正。

标签:__,文件,函数,启动,复位,hex,地址,main
From: https://blog.csdn.net/qq_48938498/article/details/140506565

相关文章

  • 推荐一种批量判断文件是否存在的快速办法
    在日常开发中,我们经常需要和文件打交道,特别是桌面开发,有时候就会需要加载大批量的文件,而且可能还会存在部分文件缺失的情况,那么如何才能快速的判断文件是否存在呢?如果处理不当,且文件数量比较多的时候,可能会造成卡顿等情况,进而影响程序的使用体验。今天就以一个简单的小例子,简述两......
  • datagrip启动报错Exception Type:EXC_BAD_ACCESS (SIGABRT)
    本人电脑背景:mac10.15安装datagrip2024版本,根据官方描述,这个版本是不支持的,但是本着试试的态度安装,毕竟也想用新版本。结果遇到了问题。启动打不开,由于错误信息较多,大概整理出来描述如下:ExceptionType:EXC_BAD_ACCESS(SIGABRT)ExceptionCodes:KERN_INVALID_......
  • 如何恢复电脑上删除的文件?快速恢复被删除文件的技巧【5个实用方法】
    如何恢复电脑上删除的文件?电脑误删文件的情况很经常发生,删除文件后第一时间可以按下组合键Ctrl+Z撤销,这样能挽回99%以上的文件。当然,如果已经彻底删除,那么可以了解下本文整理的方法找回。(一)恢复电脑删除的文件主要有以下方法使用回收站恢复:大部分文件删除后都会暂存到点电脑......
  • 电脑怎么压缩文件?分享5个压缩软件【常见压缩方法】
    电脑怎么压缩文件?压缩文件是一种常见的操作,压缩文件可以减少文件的体积,便于存储和传输。本文介绍几种常见的压缩文件方法和电脑压缩工具。方法一:使用金舟压缩宝金舟压缩宝是一款功能全面,支持视频、GIF、图片、音频、文档压缩的国产软件,支持对PDF、PPT、Word、Excel进行压缩......
  • webpack 打包后复制文件
    写在前面项目中使用一些特定依赖的时候,会定义全局暴露的变量,不希望webpack将其压缩混淆,期望在打包后的成果物中保留原样。copy-webpack-plugin首先想到使用webpack插件copy-webpack-plugin,可以直接复制原始资源到输出目录中(非最优解!)安装依赖npminstallcopy-webpack-pl......
  • Apache Tomcat文件包含漏洞复现(详细教程)
    1.漏洞原理 Tomcat服务器是一个免费的开放源代码的Web应用服务器,其安装后会默认开启ajp连接器,方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。Tomcat和IIS等Web服务器一......
  • vim 文件中出现 ^H
      0Problem  在服务器上跑keras实验,然后用tee指令把实验结果保存在文本文件中。文本文件在本机linux下用vim打开文件时会出现^M,^H。用sublime打开也会出现奇怪的字符。 1Reason   linux下的换行符是\n,windows是\r\n,所以windows下的文件在linux下打开的话,\r......
  • .NET|--杂类|--json文件未释放, 就开始反序列化, 报错Newtonsoft.Json Unexpected cha
    前言一个看起来很莫名其妙的错误,json文件我打开看了下,格式也都正确,但是在vs中调试的时候,监视--查看--JSON可视化工具查看json字符串的话,会提示"字符串未设置为JSON格式","监视--查看--文本可视化工具",发现json格式确实看不出来任何问题.报错#报......
  • .NET|--杂类|--将Shp文件转为GeoJson-通过GDAL
    前言真实需求是将Shp转为pbf文件,不过我现在已经实现了,将GeoJson格式数据转换为pbf文件,所以需要实现将Shp文件转换为GeoJson格式即可.1.下载GDAL的程序集下载地址→https://www.gisinternals.com/development.php下载完成,解压zip文件,可以看到这些dll文件(路......
  • 常用的7款加密软件排行榜|办公文件加密(2024干货收藏)
    李明:“王丽,你知道吗?最近我们部门的一些项目资料差点被泄露出去,真是让人担心。”王丽:“是啊,数据安全问题真的不容忽视。我听说现在有很多加密软件可以帮到我们,你有了解过吗?”李明:“确实,我研究了一下,发现有几款加密软件特别适合我们办公使用。不如我们一起来整理一个排行榜,分......