STM32启动详细流程之启动文件

1.前言

上一篇博客详细地讲述了一个流程:

可执行程序 -> cpu执行第一条用户代码

这个流程中着重讲述的是HEX文件如何被烧写到STM32内部的指定地址处。(烧写到STM32中的可执行文件不仅只有HEX格式,还有axf、bin。针对不同格式的可执行文件,用不同的工具进行烧写)。

而本篇文章将要详细地描述一个流程:

cpu执行第一条用户代码 -> 调用__main函数

这里需要注意一下,__main是c库中的一个函数,和main函数是有区别的!!!

2.启动文件内容描述

上图中的汇编关键字最好记住,因为比较常用。

关于STM32启动文件的描述,可以去看下我之前写过的一篇博客。

STM32之启动文件的详解

在此基础上,我们继续深入一点

2.1. DCD指令

STM32启动文件中使用DCD指令的目的是:达到4GB全范围跳转

LDR 指令只能跳到当前PC 4kB 范围内,而B指令能跳转到32MB范围。

2.2. B .

STM32启动文件中使用b . 语句的作用就是: 防止程序跑飞

副作用:触发了一个未知中断的时候会卡死在中断服务函数中,以至于你几乎都找不到!!!

注意:中断服务函数全部都是在启动文件中已经定义好了,如果在外部文件中定义中断服务函数,名称要和事先已经定义好的中断服务函数的名称一样,函数名称的不同代表着地址的不同,因为函数名称本质就是地址!!!

配套视频:

STM32启动文件大致描述

3.STM32启动流程

3.1. 获取栈顶指针

3.2. 跳转到复位中断函数

注意:当程序编译完成之后,SP栈顶指针就已经确定了。

STM32–Code、RO-data、RW-data和ZI-data

配套视频:

STM32启动流程

4.最小启动配置(加个鸡腿)

注意:设置好SP,就可以运行用户程序

4.1.编写中断向量表

4.2.编写复位中断函数

4.2.1. 设置堆栈指针

4.2.2. 跳转到__main函数

配套视频:

最小启动配置

おすすめ

転載: blog.csdn.net/qq_46359697/article/details/115033343