|
我刚接触 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,后续运行其他外设初始化代码时会直接触发硬件错误。 当前调试器运行状态不稳定,经常卡死,无法查看各类关键寄存器辅助定位故障。 有踩过同类坑的朋友,恳请分享排查思路与解决办法。 |
请问一下STM32U575VGT6在mx里怎么配置DCMI的DMA setting啊,我点那个页面只有GPDMA1,跳转过去也没有什么DCMI的选项
STM32U575的LPTIM中断问题
STM32U575低功耗问题
stm32u5g9j-dk1, 设置tzen1,之后关闭变砖
STM32u575 USART 用GPDMA接收,DMA中断,usart 中断正常来,ROR数据正确,接收缓冲却不变
STM32u575 USART 用GPDMA接收,DMA中断,usart 中断正常来,ROR数据正确,接收缓冲却不变
stm32u575 gpdma burst length=1 配置其他数值不工作
STM32U5进入standby模式时,待机电流有时候大的离谱,有时候却正常
STM32U5系列上电时序
STM32U585进入shutdown模式后偶发无法被唤醒引脚唤醒
微信公众号
手机版