【单片机】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指针跳转到新的中断向量表处,找到对应的中断向量表,根据里面的地址跳转到相应的中断处理函数。

相关推荐
单片机杂货铺21 小时前
基于单片机的智能粮仓控制系统设计与实现
stm32·单片机·嵌入式硬件·物联网·计算机外设·51单片机·课程设计
指尖的爷21 小时前
RKNN转化环境搭建(rknn_toolkit2新版本)
嵌入式硬件·深度学习·物联网·目标检测
梁朝辉21 小时前
滴泪的曲线(Curved)还是直线(Line)什么区别,都应用于什么场景!
嵌入式硬件·硬件工程
clear sky .1 天前
stm32H7进入HardFault_Handler机制
stm32·单片机·嵌入式硬件
小僧景贤1 天前
STM32 GPIO 详解(含寄存器、HAL 库、电气特性、低功耗深度剖析)
stm32·单片机·嵌入式硬件
远翔调光芯片^138287988721 天前
从参数到应用:FP7208如何以0.2V精密反馈提升LED驱动性能
科技·单片机·嵌入式硬件·智能家居·能源
碧海银沙音频科技研究院1 天前
4 BES2710编译环境搭建方法
嵌入式硬件·算法
别催小唐敲代码1 天前
STM32 定时器学习笔记:TIM 架构、输入捕获与 PWM 一篇讲透
笔记·stm32·学习
csdn杰哥1 天前
瑞萨单片机AI教程【六】导入外部电机状态数据训练模型
人工智能·单片机·嵌入式硬件·瑞萨·ra6m5
深念Y1 天前
ZTE_UZ901_NVRAM经验总结
linux·服务器·网络·嵌入式硬件·嵌入式·随身wifi