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

【单片机】STM32的启动流程(Keil) 观察启动文件1、分配堆栈设置栈顶地址和堆的开始地址和结束地址2、保持堆栈8字节对齐设置使用的指令集3、建立中断向量表注意__initial_sp是栈顶地址DCD表示分配一个4字节空间所以Reset_Handler的地址就是0x080000040x08000000作为程序的第一个地址保留实际存的是栈顶的地址。0x08000000由链接器的参数IROM1决定就是这个4、具体的复位中断函数该怎么处理在Reset_Handler处理函数里运行SystemInit配置系统时钟然后运行__main在__main里初始化堆栈和初始化映像文件将RW-data的数据复制到RAM中然后跳转到用户的main函数里。5、别的各种中断处理程序不过都是WEAK性质用户可以重定义。6、定义用不用MicroLIB的判断所以STM32的启动流程是上电CPU的时序逻辑电路完成两件事1、将0x08000000存放的栈顶地址放入SP0x08000004存放的复位中断处理函数的地址放入PC程序计数器然后进入复位中断在Reset_Handler里初始化然后跳转main函数。如果后面还有IAP的IAP就是直接跳转到后面程序的Reset_Handler这次中断向量表里存放的就是相应中断处理函数的地址。新Reset_Handler处理函数里跳转到新main函数第一时间修改SCB-VTOR寄存器这里面存放的就是中断向量表的偏移量。在新程序里发生中断PC指针跳转到新的中断向量表处找到对应的中断向量表根据里面的地址跳转到相应的中断处理函数。