时间:2019-04-12 10:03:43

标签: debugging embedded stm32 jtag

我们编写了STM32L072,在较低层使用了来自cubeMX的HAL库。

请注意,我企业中的“编程风格”并不涉及在嵌入式设备中包含看门狗。没有评论。

在一项特定的现场测试(很多测试)中,该设备停止工作(即:屏幕冻结,并且通信总线上没有响应,但PWM驱动器正在工作)

>

设备已重新启动,经过几分钟的工作,冻结再次发生。这发生在我们到达之前几次。

我们插入了JTAG / ST-LinkV2,总线或屏幕上没有任何变化。 拔下闪光灯后,设备无需重启即可重新开始工作(如果已经发生,我们可以识别出初始化模式)。

  • 我不明白JTAG规范如何解释这种行为(即解冻)?
  • 顺便说一句,什么会导致冻结,而冻结可以通过JTAG拔出而解冻?振荡器停止了吗?自动睡眠模式?硬件断点?软件断点?中断被禁用了吗?

编辑-评论和摘要的答案:

  • 不是振荡器原因,因为PWM仍在工作。
  • 软件断点?不太可能,因为在闪烁 程序。
  • 关于中断,我认为这是一个有趣的线索,但是JTAG如何通过拔掉它来改变任何东西?

1 个答案:

答案 0 :(得分:2)

很难在不了解您的软件的情况下进行确定。如果PWM正在运行,则显然振荡器没有停止。听起来该代码可能具有嵌入式软件断点指令。默认情况下,片上调试在达到断点时不会停止外设时钟。

应注意仅在连接 host 调试器(即调试器软件,而不仅仅是物理JTAG硬件)时阻止此类指令,例如:

if (CoreDebug->DHCSR & 1) __BKPT(0);

如果断点不是调试器的条件,则处理器将停止以任何方式重新启动它(除了看门狗,最好是独立的看门狗,因为可以将窗口看门狗配置为在遇到断点时停止其时钟)。

分离调试器时,将释放断点,这可能是这里发生的情况。