STM32 的开发之前做过一些,但对头文件的理解以及存储器的映射理解不是很深,现在准备开始研究ARM的时候,发现启动引导问题暴露出来了,现在我把我对STM32 启动过程描述一下,请高手指正:
STM32 有三种启动模式,根据上电后两个BOOT脚的电平可以确定是哪种启动:
1,User flash memory 2,system memory 3, embedded SRAM.
现假设User flash 的起始地址是0x08000000
system memory address 是0x1FFFF000
embedded SRAM address 是0x20000000
1。现在假设User flash 里已经烧写有应用程序,并且我选择user flash memory启动模式,则上电后PC指针从绝对物理地址0x00000000启动,然后经跟着就是执行厂家固化的boot程序(即:检测boot引脚的高低电平,根据检测结果实现指针跳转)。由于我之前假设是User flash模式,所以PC指针会跳转到0x0800000处,然后紧跟着就是堆栈设置,中断向量入口设置,最后执行main函数。
2。如果是system flash模式,则上电检测后会跳转到0x1FFFF000,在这个模式里厂家还固化了一些函数来实现IAP(初始化串口,还有一些串口协议等等)。估计在这个模式下,中断是不好使的。这一点求证??
3。如果是sram模式估计过程跟模式1的过程相似。
所以在STM32 运行中,不会出现象ARM的那种情况,即需要引导将FLASH中程序copy到SRAM中执行的这个过程。这一点结论,我心里没有底 |