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