当CAN接收中断触发时,IWDG在调试时未停止

toiithl6  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(132)

我在调试带有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

klh5stk1

klh5stk11#

找到了答案。我重新组织了代码,并选择了一个不同的实现来初始化CAN硬件。新的实现删除了这三行:

RCC->APB1RSTR &= ~RCC_APB1RSTR_CANRST;
  RCC->APB1ENR |= RCC_APB1ENR_CANEN;
  CAN->MCR = 0x00008000;

在那之后,我能够正常调试了。不确定哪一行是罪魁祸首,但足以说明HAL库是成功的。

相关问题