STM32启动过程及反汇编

STM32从Flash启动的过程,主要是从上电复位到main函数的过程,主要有以下步骤:

1.初始化堆栈指针 SP=_initial_sp,初始化 PC 指针=Reset_Handler

2.初始化中断向量表

3.配置系统时钟

4.调用 C 库函数_main 初始化用户堆栈,然后进入 main 函数。

以上部分在启动文件中实现,启动文件通常是命名为"*.s"的文件,该文件通常会放置在工程文件目录下。

通常实际的操作会比理论知识更好理解,下面,我们用ST的官方Demo板"NUCLEO-F072RB"举例来描述STM32F072RBT6启动过程以及如何利用反汇编来定位问题。

**参考代码:**Projects\STM32F072RB-Nucleo\Examples\GPIO\GPIO_IOToggle\MDK-ARM

**启动文件:**Projects\STM32F072RB-Nucleo\Examples\GPIO\GPIO_IOToggle\MDK-ARM\startup_stm32f072xb.s

**编译工具:**MDK5.23(keil)

启动文件该段代码主要定义堆栈大小,如下定义:堆大小为0x400, 栈大小为0x200;

从启动文件67行到128行定义中断向量表,下图只是截取部分:

接下来我们用STM32CubeProgram(版本V2.15)读取Nucleo板Flash的内容,如下:

从以上读出来的数据我们可以看到

**0x08000000:**该位置值为0x20000420,系统会把该值送给栈指针SP;

**0x08000004:**该位置值为0x080000D5,系统会把该值送给PC指针;通过Keil Debug模式,打开Disassembly,我们可以看到该值对应SystemInit初始化,用Stepinto的方式我们可以进到SystemInit()函数,然后进入_main(),初始化栈区,最后进入C语言的Main()函数;从硬件复位到进入main函数就到此为止。

**Disassembly:**反汇编,将机械代码还原成汇编代码,以此了解程序在干什么;

从Flash读出来的数据我们可以看到,0x0800084B,0x08000849分别对应NMI,HardFault中断,中间地址保留,为0,0x0800084F对应SVCall中断...... 以此类推。

这部分从Disassembly也可以找到。下图是参考手册中的中断向量表,只截取了部分。

以上主要描述了STM32的启动过程及如果使用反汇编,下面我们举例一个如何用STM32Cubeprogram和反汇编来Debug问题。

当Device出现问题,可以尝试使用Cubeprogram 读PC指针的值,再用Disassembly去看看程序在什么地方:

登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!

相关推荐
HPC_fac1305206781631 分钟前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
小陈phd3 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
zy张起灵3 小时前
48v72v-100v转12v 10A大功率转换电源方案CSM3100SK
经验分享·嵌入式硬件·硬件工程
Guofu_Liao4 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
PegasusYu6 小时前
STM32CUBEIDE FreeRTOS操作教程(九):eventgroup事件标志组
stm32·教程·rtos·stm32cubeide·free-rtos·eventgroup·时间标志组
ZHOU_WUYI8 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1238 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
老艾的AI世界8 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221518 小时前
机器学习系列----关联分析
人工智能·机器学习