STM32 – Cube MX生成IDWG(独立看门狗)代码

这篇文章讲述的是用Cube MX工具配置IDWG,以及注意事项(必看红字部分),用的是STM32F412芯片,使用的是IAR编译器。

1、简介

独立看门狗(IWDG)由其自己的专用低速时钟(LSI)提供时钟,因此即使主时钟发生故障也能保持活动状态。
IWDG最适合需要看门狗作为主应用之外的完全独立过程运行的应用,但具有较低的定时精度约束。

2、特点

  • 自由运行的递减计数器
  • 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)

3、Cube MX配置

IDWG的框图以及寄存器自己做功课吧,我想应该都会的,就不罗嗦。接下来看Cube MX配置,开启独立看门狗如下图:

接下来到去配置IDWG的时钟以及多久喂狗的时间,如下图:

解释一波,应为IDWG的时钟是LSI(32KHz),我这里32分频也就是1KHz,也就是每计数一次就是1ms的时间,而我设置的重载值是200,也就是说如果程序超过200ms还没有重新喂狗,那么程序就开始复位重新从main函数开始运行。再来看下面一张时钟图,确实是LSI RC独立的时钟。

好了完成这些就可以生成代码了,不过Cubx MX只是帮我们吧IDWG配置好了,但是喂狗的函数还是要我们自己写的,不用担心,直接调用库函数就行了。复制下面的代码放到main函数的while函数中。建议喂狗函数是放在main函数中而不是放在中断中,有可能程序已经跑飞了,但是中断还在运行,这样的结果就是程序一直在复位,很可怕的。

    if (IS_IWDG_RELOAD(&hiwdg) != HAL_OK)
    {
      _Error_Handler(__FILE__, __LINE__);
    }

来看一程序大概的布局,如下图:

4、血的经验….

在这里我还有一点建议,尽量把MX_IWDG_Init()初始化函数靠近while(1),原因是这样的,在while函数之前的初始化,可能有很长的延时时间(比如SPI FLASH的初始化),而你的喂狗函数时间设置的有比较小,而你初始化配置顺序是先配置IDWG后配置SPI FLASH,这样的结果就是还没进入while函数就已经复位了。

111 Comments

Add a Comment

电子邮件地址不会被公开。