[经验分享] mcu上电启动流程分析

[复制链接]
 楼主| 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不断复位,因此首先要关闭看门狗。在初始化完成后,再开启看门狗。
jackcat 发表于 2024-3-5 09:14 | 显示全部楼层
在某些情况下,为了节省能源,MCU会在处理完任务后进入睡眠模式。在睡眠模式中,MCU会关闭不必要的硬件组件,降低能耗。当有中断发生时,MCU会从睡眠模式唤醒,并执行中断服务程序。
everyrobin 发表于 2024-3-5 10:12 | 显示全部楼层
中断向量表用于标识中断源,并提供中断服务程序的入口地址。CPU会利用这个中断向量表来转入相应的中断服务程序,处理相关事务。
geraldbetty 发表于 2024-3-5 13:42 | 显示全部楼层
在主循环中,MCU会时刻监听中断请求。当有中断发生时,MCU会暂停当前正在执行的任务,保存当前任务的状态,然后跳转到相应的中断服务程序(ISR)执行中断处理。
uytyu 发表于 2024-3-5 15:40 | 显示全部楼层
MCU上电后,CPU被设计为跳转到地址0x00000000处读取代码。这个地址通常存放着复位向量,即指向复位处理程序的指针。
benjaminka 发表于 2024-3-5 20:14 | 显示全部楼层
电源上电后,复位信号产生电路会产生一个复位信号,使MCU进入复位状态。复位信号通常持续几个时钟周期,以确保MCU内部的寄存器和状态机处于初始状态。
robincotton 发表于 2024-3-5 21:51 | 显示全部楼层
将PC指针(程序计数器)设置为Reset_Handler的地址,这样MCU就知道从哪里开始执行程序。
janewood 发表于 2024-3-6 08:01 | 显示全部楼层
当系统初始化完成后,程序会跳转到main()函数,从此开始执行用户编写的主程序逻辑。
yangxiaor520 发表于 2024-3-6 08:15 来自手机 | 显示全部楼层
MCU的上电启动流程相对于MPU来说要简单得多
uptown 发表于 2024-3-7 13:26 | 显示全部楼层
在主程序中,可以根据实际应用进行初始化操作,如配置GPIO、初始化外设、设置定时器等。主程序是MCU上电启动流程的最后一步,此后MCU进入正常工作状态。
adolphcocker 发表于 2024-3-7 22:53 | 显示全部楼层
程序计数器指向启动向量表后,MCU开始执行启动代码。启动代码通常包括初始化硬件资源(如GPIO、定时器、中断等)、配置系统参数(如时钟频率、工作模式等)以及加载应用程序等操作。
pl202 发表于 2024-3-9 21:35 | 显示全部楼层
在复位过程中,MCU会初始化内部时钟系统。时钟系统为MCU内部各个模块提供时钟信号,是MCU正常工作的基础。初始化过程包括选择时钟源、设置时钟频率等。
robincotton 发表于 2024-3-10 08:38 | 显示全部楼层
在启动过程中,MCU会初始化中断向量表,这样在发生中断时,MCU能够跳转到正确的中断服务程序。
10299823 发表于 2024-3-11 14:12 | 显示全部楼层
当MCU接通电源后,电源电压逐渐上升至稳定状态,内部电路开始初始化。在这个阶段,内部电路的一些基本组件如PLL(锁相环)、振荡器开始工作,为MCU提供稳定的时钟信号。
olivem55arlowe 发表于 2024-3-11 16:49 | 显示全部楼层
MCU会跳转到用户程序的main函数,开始执行用户的应用程序代码。
houjiakai 发表于 2024-3-11 17:49 | 显示全部楼层
上电时,MCU内部的复位电路会强制所有寄存器和内存状态清零或初始化为缺省值,CPU的程序计数器(PC)也被置为复位向量地址。
sanfuzi 发表于 2024-3-12 11:24 | 显示全部楼层
在复位过程中,MCU会初始化内部寄存器,包括控制寄存器、状态寄存器、中断向量表等。初始化过程通常由硬件自动完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2347

主题

17446

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部