GD32实战19__看门狗

为什么需要看门狗

​ 我们总是期望产品能够一直稳定运行从不宕机,但事实总是不尽人意,有各种预料不到的情况发生,宕机不可避免,退而求次,我们又希望万一发生宕机,系统能够自行检测并恢复。看门狗就是为了检测故障并恢复一种常见手段。

​ 为什么叫看门狗呢?其实是一个很形象的称呼,就好像有只狗在看门一样,CPU需要固定时间喂一次食,不管CPU出于任何原因没有喂狗,狗就会叫,我们知道CPU肯定是出问题了。

​ 看门狗通常有两类,

  1. 外部看门狗,在MCU之外增加看门狗芯片,可以检查MCU硬件故障,并恢复。
  2. 内部看门狗,利用MCU内部自带看门狗,无法检查MCU硬件故障,只能检查软件故障,并恢复。

如何配置

GD32内部自带独立看门狗和窗口看门狗。

  1. 独立看门狗有独立时钟源,就算主时钟失效,它仍然能正常工作,非常适合需要独立环境而对计时精度要求不高的场景。
  2. 窗口看门狗适用于需要精确计时的场景

本质上就是一个计数器,配置非常简单,直接上代码了

#define DRV_IWDG_FeedWDog IWDG_ReloadCounter

VOID DRV_IWDG_Init(VOID)
{
    /* Enable write access to IWDG_PSR and IWDG_RLDR registers */
    IWDG_Write_Enable(IWDG_WRITEACCESS_ENABLE);

    /* IWDG counter clock: 40KHz(LSI) / 64 = 0.625 KHz */
    IWDG_SetPrescaler(IWDG_PRESCALER_16);

    /* Set counter reload value to 625 */
    IWDG_SetReloadValue(0x0fff);

    /* Reload IWDG counter */
    IWDG_ReloadCounter();

    /* Enable IWDG (the LSI oscillator will be enabled by hardware) */
    IWDG_Enable();
}

测试结果,如图,当没有喂狗时,系统会不断被狗咬,重启原因如图,喂狗后,系统正常。

GD32实战19__看门狗_第1张图片

代码路径

https://github.com/YaFood/GD32F103/tree/master/TestWDG

你可能感兴趣的:(ARM)