我在调试带有CAN通信的板时遇到了一个严重的问题。每当调试器暂停时,收到CAN消息时,独立的看门狗就会被重置。据我所知,我在调试时正确地禁用了该外设,但每当我设置断点时,IWDG就会重置MCU。如果我的板没有收到任何CAN消息,则一切都按预期工作。
MCU相关信息:STM32 F091 VB开发环境:IAR Embedded Workbench 9.30调试探针:STLink/V2下面是我禁用外围设备进行调试的代码:
//Halt Interrupts on Debug stop
__HAL_RCC_DBGMCU_CLK_ENABLE();
__HAL_FREEZE_IWDG_DBGMCU();
__HAL_FREEZE_WWDG_DBGMCU();
__HAL_FREEZE_TIM1_DBGMCU();
__HAL_FREEZE_TIM2_DBGMCU();
__HAL_FREEZE_TIM3_DBGMCU();
__HAL_FREEZE_TIM16_DBGMCU();
__HAL_FREEZE_CAN_DBGMCU();
完全禁用看门狗似乎可以工作,但在调试器中暂停只允许我调试CAN中断,即我无限地卡在该中断中,即使没有收到CAN消息。
编辑
以下是CAN寄存器,就在接收邮箱中断被清除之前:
Screenshot of CAN registers
此外,这里是DBGMU寄存器
Screenshot of Debug Registers
1条答案
按热度按时间klh5stk11#
找到了答案。我重新组织了代码,并选择了一个不同的实现来初始化CAN硬件。新的实现删除了这三行:
在那之后,我能够正常调试了。不确定哪一行是罪魁祸首,但足以说明HAL库是成功的。