你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32U575 TrustZone 工程中断异常

[复制链接]
patch1582 提问时间:2026-7-9 15:50 / 未解决

我刚接触 TrustZone,学习门槛较高,还有很多知识点不熟悉。我正在调试开启 TrustZone 的工程,调试工具为 VSCode,。首先我已将 STM32U575 的 TZEN 选项字节置 1,未开启读保护。

工程的安全区程序先启动,其中断向量表基地址为 0xC0000000,目前安全区仅执行少量初始化逻辑,其中包含一段 ST 官方标准示例代码:

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();

}

开启调试会话后,理论上这段初始化代码会先执行完毕,调试器会停在非安全区的 main 函数等待调试。

非安全区初始化 UART4,打印调试信息 Hello World,但一旦触发 UART4 发送空中断就会进入硬件错误。排查发现 UART4 的中断服务函数根本不在非安全区执行。我把 UART4 中断处理函数放到安全区后,程序计数器 PC 确实会跳转到安全区的中断函数中。

我在安全区添加了如下代码,将该中断配置为非安全中断:

NVIC_SetTargetState(UART4_IRQn);

HAL_GTZC_TZSC_ConfigPeriphAttributes(GTZC_PERIPH_UART4, GTZC_TZSC_PERIPH_NSEC);

但中断依旧匹配安全区向量表。

读取非安全区侧的SCB->VTOR寄存器,数值仍为 0xC0000000,也就是安全区向量表的映射地址。我无法区分该寄存器读取的是安全域 VTOR 还是非安全域 VTOR,也不知道该如何区分。

调试时如果手动把该寄存器值改为非安全区向量表地址 0x08080000,后续运行其他外设初始化代码时会直接触发硬件错误。

当前调试器运行状态不稳定,经常卡死,无法查看各类关键寄存器辅助定位故障。

有踩过同类坑的朋友,恳请分享排查思路与解决办法。

收藏 评论0 发布时间:2026-7-9 15:50

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版