STM32启动代码分析
上电后从中断向量表中取出栈顶指针的内容0x20008EB0,取出ResetHandler的地址0x08000179,之后跳转至了复位中断函数。
STM32启动代码分析
从0x08000194的地址内取出SystemInit函数的地址(0x08003DC4)给了r0(0x08003DC5,因为最低位必须是0代表Thumb指令),BLX进行跳转并将0x0800017C保存的LR寄存器,实际保存为0x0800017D(最低位置1)
STM32启动代码分析
到了SystemInit函数,首先将r4和lr寄存器压栈,然后赋值一些寄存器,执行到子函数时通过BL.W间接跳转到SetSysClock()函数,
STM32启动代码分析
执行后将返回地址0x08003DFB保存到了LR寄存器。又通过B.W跳转到里边的子函数SetSysClockTo72()
STM32启动代码分析
进SetSysClockTo72()后先将r2,r3和lr进行压栈
STM32启动代码分析
执行完SetSysClockTo72()通过POP返回SetSysClock()函数
STM32启动代码分析
SetSysClock()函数最后通过POP指令返回SystemInit函数
STM32启动代码分析
回到SystemInit函数后SP又指向了栈顶,恢复了现场。
STM32启动代码分析

相关文章:

  • 2021-04-13
  • 2021-07-25
  • 2021-11-08
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2022-01-17
  • 2022-12-23
猜你喜欢
  • 2021-11-19
  • 2021-05-17
  • 2022-12-23
  • 2021-10-12
  • 2021-09-27
相关资源
相似解决方案