【单片机】STM32的启动流程(Keil)

观察启动文件:

1、分配堆栈,设置栈顶地址和堆的开始地址和结束地址

2、保持堆栈8字节对齐,设置使用的指令集

3、建立中断向量表

注意:__initial_sp是栈顶地址,DCD表示分配一个4字节空间,所以Reset_Handler的地址就是0x08000004,0x08000000作为程序的第一个地址保留,实际存的是栈顶的地址。(0x08000000由链接器的参数IROM1决定,就是这个:)

4、具体的复位中断函数该怎么处理

在Reset_Handler处理函数里运行SystemInit配置系统时钟,然后运行__main,在__main里初始化堆栈和初始化映像文件,将RW-data的数据复制到RAM中,然后跳转到用户的main函数里。

5、别的各种中断处理程序,不过都是WEAK性质,用户可以重定义。

6、定义用不用MicroLIB的判断

所以STM32的启动流程是,上电,CPU的时序逻辑电路完成两件事:1、将0x08000000存放的栈顶地址放入SP,0x08000004存放的复位中断处理函数的地址放入PC程序计数器,然后进入复位中断,在Reset_Handler里初始化,然后跳转main函数。

如果后面还有IAP的,IAP就是直接跳转到后面程序的Reset_Handler,这次中断向量表里存放的就是相应中断处理函数的地址。新Reset_Handler处理函数里跳转到新main函数,第一时间修改SCB->VTOR寄存器,这里面存放的就是中断向量表的偏移量。在新程序里发生中断,PC指针跳转到新的中断向量表处,找到对应的中断向量表,根据里面的地址跳转到相应的中断处理函数。

相关推荐
shimly12345637 分钟前
(done) 嵌入式硬件电路图 (2) 熟悉常用元器件
嵌入式硬件
Zw-awa3 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
stm32
安妮细水长流6 小时前
ad7124
c语言·单片机
花月mmc8 小时前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
en.en..8 小时前
STM32 HAL 库 | 核心知识点整理
单片机·嵌入式硬件
无敌贵点大王8 小时前
从寄存器层面重学STM32(9)——DMA理论
stm32·单片机·嵌入式硬件
希和20279 小时前
51 单片机入门笔记:江科大课程代码逐行讲解(按键控制 LED 流水灯)
笔记·单片机·mongodb
希和202710 小时前
51 单片机按键控制 LED:江科大课程代码小白笔记
笔记·单片机·嵌入式硬件
希和202710 小时前
51 单片机 LED 流水灯:从直接法到循环法(江科大课程笔记)
笔记·单片机·mongodb
Zwawa1 天前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式