Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在调试期间禁用STM32 IWDG_C_Stm32_Watchdog_Chibios - Fatal编程技术网

C 在调试期间禁用STM32 IWDG

C 在调试期间禁用STM32 IWDG,c,stm32,watchdog,chibios,C,Stm32,Watchdog,Chibios,我在STM32F4微控制器上有一个ChibiOS 3.x程序,在出现如下错误时,我使用IWDG看门狗重置MCU: intmain(){ iwdgInit(); iwdgStart(&IWDGD,&wd_-cfg); while(true){ //…做事 } } 如果我现在连接调试器,并在任何时候停止程序(手动或通过断点),微控制器将在看门狗配置定义的超时后重置(因此会导致调试过程中出现问题) 如何禁用此行为,即在内核因调试器而停止时如何禁用IWDG 我已经尝试完全禁用它,但是,我需要让它保持运

我在STM32F4微控制器上有一个ChibiOS 3.x程序,在出现如下错误时,我使用IWDG看门狗重置MCU:

intmain(){
iwdgInit();
iwdgStart(&IWDGD,&wd_-cfg);
while(true){
//…做事
}
}
如果我现在连接调试器,并在任何时候停止程序(手动或通过断点),微控制器将在看门狗配置定义的超时后重置(因此会导致调试过程中出现问题)

如何禁用此行为,即在内核因调试器而停止时如何禁用IWDG


我已经尝试完全禁用它,但是,我需要让它保持运行以捕获不需要的IWDG重置。

STM32 MCU包含一个称为调试冻结的功能。您可以停止几个外围设备,包括I2C超时、RTC,当然还有看门狗

在中,请参阅第38.16.4ff节“MCU调试组件(DBGMCU)”

IWDG在APB1总线上运行。因此,您需要修改
DBGMCU_APB1_FZ
,最具体地说是断言该寄存器中的位
DBG_IWDG_STOP

此寄存器的POR值(=默认值)为0x0,即,如果您未主动禁用它,IWDG仍将运行

intmain(){
//如果堆芯停止,则禁用IWDG
DBGMCU->APB1FZ |=DBGMCU_APB1_FZ_DBG_IWDG_站;
//现在我们可以启用IWDG
iwdgInit();
iwdgStart(&IWDGD,&wd_-cfg);
// [...]
}
请注意,当不在软件中启用看门狗时,如果在闪存选项字节中重置
WDG_SW
位,则可能仍在硬件中启用看门狗

如果您使用的是ST HAL(不包括在ChibiOS中,请参阅),也可以使用此宏:

 __HAL_DBGMCU_FREEZE_IWDG();
(基本上与我们上面做的完全相同)

此外,在调用
之前,需要在APB2上启用DBGMCU时钟


使用ST HAL时,要使用的正确宏是:

__HAL_DBGMCU_FREEZE_IWDG()

根据参考手册,DBGMCU_CR寄存器“可由调试器在系统重置时写入”,因此,如果调试器支持它,则无需更改软件

例如,在STM32CubeIDE(从现在的1.6.0版开始)中,只需设置[项目名称]:>[项目名称]调试>编辑>调试器>设备设置>暂停时挂起看门狗计数器的项目>属性>运行/调试设置>启动配置:


启用。

很好,感谢您添加此选项。大多数情况下,我不使用HAL,至少对于简单的东西,但是我想大多数人通常使用ST HAL,所以这可能对他们非常有帮助。这是否也适用于在停止模式之前禁用IWDG?
__HAL_DBGMCU_FREEZE_IWDG()