我想从设备的 SRAM 区域运行我的程序。
我似乎很清楚,我必须执行以下步骤:
- 修改向量表偏移寄存器
SCB->VTOR
(位于0xE000ED08
)以指向SRAM区域的开头,因为那是我的向量表所在的位置位于:0x20000000
- 重置设备,以便它再次获取堆栈指针初始化值和重置处理程序地址。
不幸的是,每当我在 OpenOCD 中发出 reset init
命令时,SCB->VTOR
的值就会被清除。因此,堆栈指针初始化值和重置处理程序地址是从 0x00000000
而不是 0x20000000
获取的。
问题
如何让我的 STM32F4 从 0x20000000
获取向量表?
最佳答案
只需从 0x20000000
(=VTOR) 加载 SP
(MSP) 并从 0x20000004
加载 PC
( =VTOR+4) 手动。
reset init
命令通常会重置整个芯片,而不仅仅是内核 - 即使如此,VTOR
也会初始化为零。
关于STM32:从SRAM引导和获取向量表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28178775/