在STM32F4微控制器的启动过程中,有些事情我不了解。
我的理解如下:
- ARM Cortex-M4引导程序期望堆栈指针初始化值和上的中断向量
0x00000000 + SCB->VTOR
,而SCB->VTOR
在复位时被清除。 - 该位置没有内存。闪存从处开始
0x08000000
,SRAM 从处开始0x20000000
。 - 为了使启动成为可能,µC可以将闪存或SRAM存储器范围映射到
0x00000000
。要映射的存储器范围由启动引脚的状态定义。
我的问题:
为什么STM32F4参考手册在第69页上说
当器件从SRAM启动时,在应用程序初始化代码中,您必须使用NVIC异常表和偏移寄存器在SRAM中重新定位向量表。
?在我看来,这是没有必要的,因为整个内存区域还是会被别名的。有趣的是,当将闪存区域重新映射到
0x0
空间时,似乎并不需要这样做。我可以认为,从SRAM引导的唯一用途是减少开发过程中闪存的写周期。从复位释放µC之前,您需要使用调试器将程序写入SRAM,然后从那里启动。但是,由于您具有调试器访问权限,因此无论如何从哪里引导都没有任何限制。那么为什么要具有此功能?
引导位置是从引脚导出的(至少在我看来)表明此功能不是在开发期间使用,而是在最终操作中使用。并且在最终操作中,SRAM在启动时是清除的。因此,从SRAM引导是没有意义的。