21ic问答首页 - 使用jlink仿真报错
使用jlink仿真报错
请教下各位老师、大佬这种问题一般会是啥原因导致的,或是提供下定位问题的思路?拜谢!!!
开发环境:MDK V5.36仿真器:jlink
芯片:AT32F403ARCT7
问题:debug仿真时经常出现程序运行中断问题,且每次程序停止时显示在芯片驱动库的“usart_reset"函数。
jlink报错信息:
* JLink Info: T-bit of XPSR is 0 but should be 1. Changed to 1.
***JLink Error: CPU is not halted


开发环境:MDK V5.36仿真器:jlink
芯片:AT32F403ARCT7
问题:debug仿真时经常出现程序运行中断问题,且每次程序停止时显示在芯片驱动库的“usart_reset"函数。
jlink报错信息:
* JLink Info: T-bit of XPSR is 0 but should be 1. Changed to 1.
***JLink Error: CPU is not halted
赞0
评论
2025-06-26
赞0
感谢指导
已经定位到问题了,是mcu的VDD波动导致的
评论
2025-06-26
好的,定位到问题就很棒了。
赞0
感谢指导
定位到问题了,是由于芯片VDD出现波动导致的。
我这边是用AT32F403A作为主控去驱动两个无刷电机,供电网络是用直流电源12v供电给到无刷电机的驱动IC,同时通过两颗LDO 12v降5v再降3.3v作为VDD给到mcu供电。在调试过程中堵转电机时供电电流有1.5A左右,同时用示波器测量VDD电压约有680mv的波动,这个波动电压与堵转时的电流有关,堵转电流越大VDD波动就越大,堵转持续VDD也同样会持续保持在增大后的电压值(如图所示电压会往上增加);如果是用jlink进行debug仿真程序,就会出现程序运行中断的问题,无堵转无大电流情况下VDD正常也就不会出现上述问题。
企业微信截图_17509187132206.png (911.01 KB )
下载附件
2025-6-26 14:18 上传
评论
2025-06-26
赞0
对你来说,下面这个方法可能是最好的:
1、做代码减法测试,通过逐渐屏蔽代码的方式确认减到什么情况下正常了;
2、做代码加法测试,先屏蔽到程序可以正常在main里循环运行,可以加个计数值变量来监控,在程序正常的情况下逐渐增加你的代码,看加到什么时候开始异常?
3、可能原因应该就是楼上朋友发的那些,但对你来说,直接排查可能有点困难;
你可以先找到原因,再仔细分析。如果需要帮助,可以直接回复我。
我用过雅特力的MCU,目前没遇到过这个问题。
评论
2025-06-26
赞0
评论
2025-06-26
赞0
如果程序运行到某个函数(如 usart_reset)时突然停止,可能是 局部变量过多、递归调用过深或中断嵌套过深,导致堆栈溢出。
检查方法:
在 startup_*.s 文件中调整堆栈大小(如 Stack_Size 和 Heap_Size)。
在 map 文件或 MDK 的编译输出中查看堆栈使用情况。
(2)中断向量表异常
T-bit (Thumb bit) 错误(XPSR.T = 0)通常意味着 CPU 尝试执行 ARM 模式(非 Thumb 模式)代码,但 Cortex-M 只支持 Thumb-2 指令集。
可能原因:
中断向量表未对齐或损坏(如 VTOR 寄存器指向错误地址)。
中断服务函数(ISR)未正确声明(如 __attribute__((weak)) 或未实现)。
检查方法:
确认 SystemInit() 是否正确初始化 SCB->VTOR(确保指向正确的 Flash/ROM 地址)。
检查 .map 文件,确认所有中断向量(如 USARTx_IRQHandler)是否正确定义。
(3)USART 外设配置问题
如果总是在 usart_reset 函数卡死,可能是 USART 初始化或 DMA/中断配置错误,导致 总线访问冲突(如 USART 时钟未使能、寄存器访问越界)。
检查方法:
确保 RCC->APBxENR 已正确使能 USART 时钟。
检查 USART 的 GPIO 配置(如 AF 复用功能是否正确)。
如果使用 DMA,检查 DMA_Init() 配置是否正确(如缓冲区地址、传输长度)。
(4)JTAG/SWD 调试接口干扰
J-Link 报错 CPU is not halted 可能由于 调试接口受干扰(如 SWD 线太长、未正确上拉)。
检查方法:
缩短调试线,确保 SWDIO 和 SWCLK 有适当上拉(如 4.7kΩ 到 3.3V)。
尝试降低 J-Link 的调试速度(如从 1MHz 降到 100kHz)。
(5)电源/复位问题
电压不稳或复位信号异常 可能导致 CPU 运行异常。
检查方法:
用示波器检查 VDD 和 NRST 引脚是否稳定。
检查 BOR(Brown-Out Reset)配置,确保电压跌落时不会意外复位。
评论
2025-06-25
您需要登录后才可以回复 登录 | 注册