STM32CubeMX学习笔记八 《窗口看门狗》

前言

废话: 前端时间忙的头昏脑胀的,确实没时间去同步更新博客记录学习过程,加油吧,越努力越幸运!

前面一章已经记录了如何通过STM32CubeMX配置独立看门狗,接下来看看窗口看门狗的配置及区别。

窗口看门狗简介

原理: 窗口看门狗(WWDG) 通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序
背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位( WWDG->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前, 如果 7 位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个 MCU 复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。也就是说通过设置相关寄存器,设定其上限时间和下限时间,喂狗的时间不能过早也不能过晚。

窗口看门狗与独立看门狗比较

  1. 在于如果程序跑飞后又跑回正常或者跑乱的程序正好执行了刷新看门狗这样独立看门狗是不能检查到并复位芯片的,而窗口看门狗限制了喂狗的时间,如果程序跑飞并且在限制的时间段喂狗是非常困难的,从而保证在程序跑飞的情况下可以完成复位功能。
  2. 独立看门狗一般是由LSI驱动,即使主时钟发生故障它仍然有效,适用于对时间精度要求不高的场景下;窗口看门狗是由APB1时钟分频后得到的时钟驱动,适用于对时间精度要求较高的情况下。

窗口看门狗复位分析
STM32CubeMX学习笔记八 《窗口看门狗》
在窗口看门狗的递减计数器递减到窗口配置寄存器配置的上窗口W[6:0]之前以及在下窗口0x3f之后都是不可以进行刷新递减计数器的(会产生复位动作),也就是我们所谓的喂狗动作。很显然我们只能在上窗口W[6:0]与下窗口0x3f之间进行喂狗。

STM32CubeMX学习笔记八 《窗口看门狗》
时钟: 递减计数器时钟是来源PCLK1,由于PCLK1时钟频率过高再经过预分频器WDGTB后为递减计数器的时钟
WWDG_CR寄存器: T7是WDGA启动位-使能窗口看门狗,T0-6是6位递减计数器寄存器
WWDG_CFR寄存器: W0-6设置窗口看门狗上窗口值

窗口看门狗超时公式
STM32CubeMX学习笔记八 《窗口看门狗》
以上便是窗口看门狗的简介,接下来我们将通过STM32CubeMx软件来配置窗口看门狗,实现窗口看门狗的中断功能来喂狗,通过 DS0 和 DS1 提示程序的运行状态。

第一步 创建工程

1. 打开STM32CubeMX软件,创建新工程

STM32CubeMX学习笔记八 《窗口看门狗》

2. 选择自己所用的芯片

STM32CubeMX学习笔记八 《窗口看门狗》

3. 我们这里初始化LED的GPIO用作提示验证软件是否正常运行。

STM32CubeMX学习笔记八 《窗口看门狗》

4. 配置窗口看门狗初始化

STM32CubeMX学习笔记八 《窗口看门狗》

5. 因为我们要用看门的中断功能来喂狗所以需要配置我们的中断。

STM32CubeMX学习笔记八 《窗口看门狗》

6. 配置RCC以备使用外部时钟源。

STM32CubeMX学习笔记八 《窗口看门狗》

7. 配置时钟树

STM32CubeMX学习笔记八 《窗口看门狗》

8. 设置工程名称、所用的软件编辑器和软件中堆栈的大小。

STM32CubeMX学习笔记八 《窗口看门狗》

9. 配置所调用的HAL后,点击③处生成软件工程。

STM32CubeMX学习笔记八 《窗口看门狗》

10. 打开软件工程wwdg.c文件查看初始化配置。 STM32CubeMX学习笔记八 《窗口看门狗》

11.编写中断回调函数。

STM32CubeMX学习笔记八 《窗口看门狗》

第二步 下载验证

将我们的工程编译完成后下载来验证是否完成我们本节的需求。(已完成功能的基本测试)

窗口看门狗工程
百度网盘链接: https://pan.baidu.com/s/19opslijqHHCsGNf8k14y_Q
提取码:og7v

总结

通过STM32CubeMX软件配置窗口看门狗已经完成。这个功能实现起来相对简单,重点是了解窗口看门的原理和运行机制这对我们软件的编写会有很大的帮助。好了,本节就到这里吧。

STM32CubeMX学习笔记九《定时器配置》
作者:Cary.chen