首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调试期间禁用STM32 IWDG

在调试期间禁用STM32 IWDG
EN

Stack Overflow用户
提问于 2015-09-12 06:18:31
回答 3查看 18K关注 0票数 8

我在STM32F4微控制器上有一个ChibiOS 3.x程序,其中我使用IWDG watchdog在出现以下错误时重置MCU:

代码语言:javascript
复制
int main() {
    iwdgInit();
    iwdgStart(&IWDGD, &wd_cfg);
    while(true) {
        // ... do stuff
    }
}

如果我现在连接调试器,并在任何时候停止程序(手动或通过断点),微控制器将在看门狗配置定义的超时后重置(因此会在调试过程中导致问题)

如何禁用此行为,例如,当内核因调试器而停止时,如何禁用IWDG?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-12 06:18:31

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

STM32 reference manual中,请参阅第38.16.4ff节"MCU调试组件(DBGMCU)“。

IWDG在APB1总线上运行。因此,您需要修改DBGMCU_APB1_FZ,尤其是置位该寄存器中的位DBG_IWDG_STOP

该寄存器的POR值(=默认值)为0x0,即如果不主动禁用,IWDG仍将运行。

代码语言:javascript
复制
int main() {
    // Disable IWDG if core is halted
    DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_IWDG_STOP;
    // Now we can enable the IWDG
    iwdgInit();
    iwdgStart(&IWDGD, &wd_cfg);
    // [...]
}

请注意,当不在软件中使能看门狗时,如果闪存选项字节中的WDG_SW位复位,则仍可能在硬件中使能看门狗。

如果您使用的是ST HAL (未包含在ChibiOS中,请参见STM32CubeF4),则还可以使用此宏:

代码语言:javascript
复制
 __HAL_DBGMCU_FREEZE_IWDG();

(它基本上和我们上面做的完全一样)

此外,在调用__HAL_DBGMCU_FREEZE_IWDG()之前,您需要使能APB2上的DBGMCU时钟。

代码语言:javascript
复制
 __HAL_RCC_DBGMCU_CLK_ENABLE();
票数 13
EN

Stack Overflow用户

发布于 2016-07-26 19:45:42

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

代码语言:javascript
复制
__HAL_DBGMCU_FREEZE_IWDG()
票数 6
EN

Stack Overflow用户

发布于 2021-03-31 21:01:49

根据参考手册,DBGMCU_CR寄存器“可以在系统复位时由调试器写入”,因此,如果调试器支持它,则不需要对软件进行更改。

例如,在STM32CubeIDE (现在是1.6.0版本)中,只需为项目名称设置项目>属性>运行/调试设置>启动配置:>项目名称调试>编辑>调试器>设备设置>暂停时暂停看门狗计数器:

以启用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32532916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档