打印
[经验分享]

mcu上电启动流程分析

[复制链接]
4272|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-2-5 16:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
简介
执行程序都是执行主函数,从主函数main开始执行。但是在单片机中上电后第一个执行的程序是复位向量表中的复位向量函数(Reset_Handler)。这个函数由启动文件(startup)提供,它会进行一些初始化操作,例如设置堆栈指针、初始化全局变量等,并最终跳转到主函数(main)开始执行用户程序。因此,在编写STM32的应用程序时,我们需要在主函数中编写程序逻辑。



执行顺序
1、初始化堆栈指针SP=_initial_sp
2、初始化PC 指针=Reset_Handler
3、初始化中断向量表
4、配置系统时钟SystemInit
5、调用C 库函数_main 初始化用户堆栈,从而最终调用main 函数去到C 的世界
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_32348883/article/details/135395460

使用特权

评论回复
沙发
chenjun89| | 2024-2-5 22:02 | 只看该作者
了解启动文件有助于了解芯片的启动初始化流程和机制。

使用特权

评论回复
板凳
iyoum| | 2024-3-4 16:57 | 只看该作者
当MCU上电后,首先会读取复位向量表。复位向量表由启动文件(startup)提供,并会指向一个名为Reset_Handler的函数。这个函数会进行一些初始化操作,例如设置堆栈指针、初始化全局变量等。

使用特权

评论回复
地板
sdlls| | 2024-3-5 09:06 | 只看该作者
看门狗是用来监控应用程序的异常运行并复位CPU的。在初始化阶段,由于还没有进行“喂狗”这一动作,可能会导致CPU不断复位,因此首先要关闭看门狗。在初始化完成后,再开启看门狗。

使用特权

评论回复
5
jackcat| | 2024-3-5 09:14 | 只看该作者
在某些情况下,为了节省能源,MCU会在处理完任务后进入睡眠模式。在睡眠模式中,MCU会关闭不必要的硬件组件,降低能耗。当有中断发生时,MCU会从睡眠模式唤醒,并执行中断服务程序。

使用特权

评论回复
6
everyrobin| | 2024-3-5 10:12 | 只看该作者
中断向量表用于标识中断源,并提供中断服务程序的入口地址。CPU会利用这个中断向量表来转入相应的中断服务程序,处理相关事务。

使用特权

评论回复
7
geraldbetty| | 2024-3-5 13:42 | 只看该作者
在主循环中,MCU会时刻监听中断请求。当有中断发生时,MCU会暂停当前正在执行的任务,保存当前任务的状态,然后跳转到相应的中断服务程序(ISR)执行中断处理。

使用特权

评论回复
8
uytyu| | 2024-3-5 15:40 | 只看该作者
MCU上电后,CPU被设计为跳转到地址0x00000000处读取代码。这个地址通常存放着复位向量,即指向复位处理程序的指针。

使用特权

评论回复
9
benjaminka| | 2024-3-5 20:14 | 只看该作者
电源上电后,复位信号产生电路会产生一个复位信号,使MCU进入复位状态。复位信号通常持续几个时钟周期,以确保MCU内部的寄存器和状态机处于初始状态。

使用特权

评论回复
10
robincotton| | 2024-3-5 21:51 | 只看该作者
将PC指针(程序计数器)设置为Reset_Handler的地址,这样MCU就知道从哪里开始执行程序。

使用特权

评论回复
11
janewood| | 2024-3-6 08:01 | 只看该作者
当系统初始化完成后,程序会跳转到main()函数,从此开始执行用户编写的主程序逻辑。

使用特权

评论回复
12
yangxiaor520| | 2024-3-6 08:15 | 只看该作者
MCU的上电启动流程相对于MPU来说要简单得多

使用特权

评论回复
13
uptown| | 2024-3-7 13:26 | 只看该作者
在主程序中,可以根据实际应用进行初始化操作,如配置GPIO、初始化外设、设置定时器等。主程序是MCU上电启动流程的最后一步,此后MCU进入正常工作状态。

使用特权

评论回复
14
adolphcocker| | 2024-3-7 22:53 | 只看该作者
程序计数器指向启动向量表后,MCU开始执行启动代码。启动代码通常包括初始化硬件资源(如GPIO、定时器、中断等)、配置系统参数(如时钟频率、工作模式等)以及加载应用程序等操作。

使用特权

评论回复
15
pl202| | 2024-3-9 21:35 | 只看该作者
在复位过程中,MCU会初始化内部时钟系统。时钟系统为MCU内部各个模块提供时钟信号,是MCU正常工作的基础。初始化过程包括选择时钟源、设置时钟频率等。

使用特权

评论回复
16
robincotton| | 2024-3-10 08:38 | 只看该作者
在启动过程中,MCU会初始化中断向量表,这样在发生中断时,MCU能够跳转到正确的中断服务程序。

使用特权

评论回复
17
10299823| | 2024-3-11 14:12 | 只看该作者
当MCU接通电源后,电源电压逐渐上升至稳定状态,内部电路开始初始化。在这个阶段,内部电路的一些基本组件如PLL(锁相环)、振荡器开始工作,为MCU提供稳定的时钟信号。

使用特权

评论回复
18
olivem55arlowe| | 2024-3-11 16:49 | 只看该作者
MCU会跳转到用户程序的main函数,开始执行用户的应用程序代码。

使用特权

评论回复
19
houjiakai| | 2024-3-11 17:49 | 只看该作者
上电时,MCU内部的复位电路会强制所有寄存器和内存状态清零或初始化为缺省值,CPU的程序计数器(PC)也被置为复位向量地址。

使用特权

评论回复
20
sanfuzi| | 2024-3-12 11:24 | 只看该作者
在复位过程中,MCU会初始化内部寄存器,包括控制寄存器、状态寄存器、中断向量表等。初始化过程通常由硬件自动完成。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1903

主题

15576

帖子

11

粉丝