问题背景:
因为工程中加入了独立看门狗IWDG,但是有时候需要硬件仿真单步调试设置个断点啥的,这时候看门狗就会因为没有及时喂狗复位,弹窗报错,整个仿真都不能继续了。实测JLINK会弹窗如下图所示,但是亲儿子STLINK没有任何弹窗…
之前一直都是在debug的时候关掉看门狗宏定义,但是这样麻烦不说,会有一个隐患存在就是,真正的项目工程是需要看门狗的,我们随意关掉的话,终究会存在debug完之后忘记再重新打开看门狗的问题,所以我们最好的办法是能够在debug这个特定的条件下,冻结掉看门狗,就像低功耗下冻结看门狗一样。
解决办法:
翻阅参考手册
#define __HAL_DBGMCU_FREEZE_IWDG() SET_BIT(DBG->APBFZ1, DBG_APB_FZ1_DBG_IWDG_STOP)
#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBG->APBFZ1, DBG_APB_FZ1_DBG_IWDG_STOP)
/*********************调试模式下禁用独立看门狗IWDG**********************************/
__HAL_RCC_DBGMCU_CLK_ENABLE(); //打开时钟
__HAL_DBGMCU_FREEZE_IWDG(); //调试模式下,冻结看门狗计数器时钟
__HAL_RCC_DBGMCU_CLK_DISABLE(); //关闭时钟
/*********************调试模式下使能独立看门狗IWDG**********************************/
__HAL_RCC_DBGMCU_CLK_ENABLE(); //打开时钟
__HAL_DBGMCU_UNFREEZE_IWDG(); //调试模式下,使能看门狗计数器时钟
__HAL_RCC_DBGMCU_CLK_DISABLE(); //关闭时钟