我正在使用 STM32L562E-DK 开发板测试 "STM32Cube_FW_L5_V1.6.0" 软件包中包含的 "TrustZoneEnabled" 模板。目标是运行从安全区切换到非安全区的基础示例,但我在按照 "README.txt" 中的所有说明操作并编译项目之后发现,代码会卡在下面这个函数中:
static void NonSecure_Init(void)
{
funcptr_NS NonSecure_ResetHandler;
SCB_NS->VTOR = VTOR_TABLE_NS_START_ADDR;
/* Set non-secure main stack (MSP_NS) */
__TZ_set_MSP_NS((*(uint32_t *)VTOR_TABLE_NS_START_ADDR));
/* Get non-secure reset handler */
NonSecure_ResetHandler = (funcptr_NS)(*((uint32_t *)((VTOR_TABLE_NS_START_ADDR) + 4U)));
/* Start non-secure state software application */
NonSecure_ResetHandler();
}
具体卡在 "NonSecure_ResetHandler ()" 这一行;
当前option bytes配置(已通过 STM32CubeProgrammer 验证):
- DBANK => 已勾选(Checked)
- TZEN => 已勾选(Checked)
- nSWBOOT0 => 已勾选(Checked)
- nBOOT0 => 未勾选(Unchecked)
- NSBOOTADD0 => 值:0x100000 => 地址:0x08000000
- NSBOOTADD1 => 值:0x17f200 => 地址:0x0bf90000
- SECBOOTADD0 => 值:0x1 => 地址:0x00000080
- SECWM1_PSTRT => 值:0x0 => 地址:0x08000000
- SECWM1_PEND => 值:0x7F => 地址:0x0803f800
- SECWM2_PSTRT => 值:0x1 => 地址:0x08040800
- SECWM2_PEND => 值:0x0 => 地址:0x08040000
|