良许Linux教程网 干货合集 STM32的启动流程到底是怎样的?

STM32的启动流程到底是怎样的?

在近期,我们发现后台不断有用户咨询关于STM32微控制器的启动程序细节,所以今日我们决定详细探讨这个主题。

引言

在开始深入STM32的启动程序之前,有必要指出,理解此过程至少需要具备基本的汇编语言知识

汇编语言是最接近硬件的编程语言之一,简称低级语言,而像C语言这样的编程语言则称为高级语言,两者在语法结构上存在明显的差别。

对于那些涉足硬件底层开发的技术人员来说,至少要对汇编有所认识。不必深入至专家级别,但至少对常用汇编指令应能读懂并理解其含义。这样才能确保在探索STM32的初始化和启动过程中不会遇到无法逾越的语言障碍。

2.说明

STM32的启动文件与编译器有关,不同编译器,它的启动文件不同。

虽然启动文件(汇编)代码各有不同,但它们原理类似,都属于汇编程序。

我们拿基于MDK-ARM的启动文件来举例,说一下要点内容

3.分配堆栈

在基于MDK的启动文件开始,有一段汇编代码是分配堆栈大小的。

image-20231228181244696
image-20231228181244696

这里重点知道堆栈数值大小就行。还有一段AREA(区域),表示分配一段堆栈数据段。

数值大小可以自己修改,也可以使用STM32CubeMX数值大小配置:

image-20231228181248458
image-20231228181248458

在IAR中,是通过工程配置堆栈大小:

image-20231228181251159
image-20231228181251159

4.向量表

相信大家都知道向量表,先看汇编代码:

image-20231228181254760
image-20231228181254760

这个向量表就是对应手册中的那些内容:

image-20231228181257598
image-20231228181257598

我们需要知道这个地方中的复位,程序上电之后,是跳到Reset_Handler这个位置。

5.执行代码

上面知道代码是从Reset_Handler开始执行,我们看Reset_Handler汇编代码:

image-20231228181300368
image-20231228181300368

在启动的时候,执行了SystemInit这个函数。

之前标准外设库在SystemInit这个函数初始化了系统时钟,后面HAL库单独把那部分代码提出来了。

执行完SystemInit函数,就跳转到我们的main函数执行了。

6.最后

作为普通人,知道大致启动流程即可。里面知识还有很多,有时间可以深究。

你要问我相关细节问题,我可能也不知道。我读书时考计算机三级就是汇编,虽然上机(汇编)编程满分,但很多细节知识,我至今也不知道。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部