当 CAN 接收中断被触发时,IWDG 不会停止调试

问题描述 投票:0回答:1

我在使用 CAN 流量调试我的电路板时遇到了一个严重的问题。每当调试器暂停并收到 CAN 消息时,独立看门狗就会被重置。据我所知,我在正确调试时禁用了该外设,但只要我设置断点,IWDG 就会重置 MCU。如果我的开发板没有收到任何 CAN 消息,则一切正常。

相关信息 单片机:STM32F091VB 开发环境: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 Register

Screenshot of Debug Registers

c debugging can-bus iar stm32f0
1个回答
0
投票

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

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

之后就可以正常调试了。不是 exactly 确定哪一行是罪魁祸首,但足以说 HAL 库是赢家。

© www.soinside.com 2019 - 2024. All rights reserved.