发新帖我要提问
12
返回列表
打印
[STM32F1]

STM32的上电启动过程

[复制链接]
楼主: jonas222
手机看帖
扫描二维码
随时随地手机跟帖
21
ccook11| | 2025-2-14 13:28 | 只看该作者 回帖奖励 |倒序浏览
系统上电或复位后,代码区始终从0x00000000地址开始执行。首先会将存储空间的地址映射到0x00000000中,然后CPU从该地址读取32位长度的值并赋值给栈指针SP,接着从0x00000004地址读取32位长度的值复制给程序计数器PC,程序将从PC指针内容处开始执行。例如,对于常见的STM32F1系列芯片,上电后可能从0x08000000地址开始映射,此时SP会被设置为某个初始值,PC会被设置为0x08000004等地址处的值。

使用特权

评论回复
22
abotomson| | 2025-2-14 14:04 | 只看该作者
向量表位置
向量表是 STM32 启动的关键数据结构,它存储在内存的起始地址。对于 STM32 不同的型号,向量表的起始地址可能有所不同,但通常位于地址 0x00000000 或 0x08000000。
读取堆栈指针(SP)初始值
上电后,STM32 首先从向量表的第一个位置(地址 0x00000000 或 0x08000000)读取堆栈指针(SP)的初始值。这个值会被加载到主堆栈指针(MSP)寄存器中,用于初始化堆栈。堆栈在程序运行过程中用于保存局部变量、函数调用的返回地址等信息。
读取程序计数器(PC)初始值
接着,STM32 从向量表的第二个位置读取程序计数器(PC)的初始值。这个值指向复位处理函数的入口地址,程序将从这个地址开始执行。

使用特权

评论回复
23
sanfuzi| | 2025-2-14 15:11 | 只看该作者
复位处理函数首先会对系统时钟进行初始化。系统时钟是 STM32 正常运行的基础,它为各个外设和内核提供时钟信号。初始化过程包括选择时钟源(如内部 RC 振荡器、外部晶振)、配置 PLL(锁相环)以提高时钟频率等操作,确保系统时钟达到预期的频率。

使用特权

评论回复
24
robincotton| | 2025-2-14 17:39 | 只看该作者
Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址。
复位后,Cortex-M3内核会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。

使用特权

评论回复
25
iyoum| | 2025-2-14 19:10 | 只看该作者
执行启动文件:
启动文件(如startup_stm32xx.s)在STM32的启动过程中起着关键作用。
它负责初始化堆栈指针、程序计数器、加载数据段和初始化未初始化的数据段,并最终跳转到main函数。
启动文件还包含中断向量表,确保系统能够正确响应中断。
加载.data和.bss段:
程序会加载已初始化的数据段(.data)和未初始化的数据段(.bss)。
这些数据段通常从Flash加载到SRAM中,并进行初始化。
系统时钟初始化:
系统复位后,硬件会自动对齐到特定地址(如0x08000144),执行SystemInit函数来初始化系统时钟。
跳转到main函数:
完成上述步骤后,程序会跳转到main函数,开始执行用户的应用程序。

使用特权

评论回复
26
10299823| | 2025-2-14 20:12 | 只看该作者
程序跳转到main()函数,开始执行用户的应用程序

使用特权

评论回复
27
jimmhu| | 2025-2-14 20:46 | 只看该作者
STM32的上电启动过程是一个由硬件初始化、软件初始化和具体流程组成的复杂过程。

使用特权

评论回复
28
burgessmaggie| | 2025-2-14 21:17 | 只看该作者
当给 STM32 上电或者按下复位按键时,芯片会进入复位状态。复位电路会拉低复位引脚(NRST)的电平,使得芯片内部的各个寄存器和电路回到初始状态。这个阶段会清除之前可能存在的不稳定状态,为后续的启动做好准备。

使用特权

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

本版积分规则