简介
WWDG(Window Watchdog,窗口看门狗)是 STM32 单片机中用于监测系统运行状态的外设,可防止程序跑飞或死循环。STM32F407 系列芯片配备了 1 个 WWDG,具有窗口检测功能,只有在规定的时间窗口内喂狗才能复位系统,广泛应用于需要高可靠性监测的场景。本文从 WWDG 的基本原理出发,详细讲解 STM32F407 WWDG 的配置方法、代码实现、窗口检测以及实际应用案例,帮助你快速掌握 WWDG 的使用技巧。
一、WWDG核心概念与分类
1.1 基本概念
WWDG 是一个基于计数器的看门狗,其主要特点包括:
- 窗口检测:只有在规定的时间窗口内喂狗才能复位系统
- 提前唤醒中断:在计数器达到 0x40 时触发中断
- 独立时钟:使用 APB1 时钟,不受主时钟影响
- 可配置参数:可配置计数器值、窗口值、预分频系数等
关键参数:
- 计数器值:7 位,范围 0x40-0x7F
- 窗口值:7 位,范围 0x40-0x7F
- 预分频系数:1、2、4、8
- 超时时间:由预分频系数和计数器值决定
1.2 STM32F407 的 WWDG 资源
STM32F407 系统芯片配备了 1 个 WWDG:
| 功能 | 特性 |
|---|---|
| 计数器 | 7 位递减计数器 |
| 时钟源 | APB1 时钟 |
| 预分频系数 | 1、2、4、8 |
| 窗口值 | 7 位,范围 0x40-0x7F |
| 中断 | 提前唤醒中断 |
关键特性:
- 支持 7 位递减计数器
- 支持窗口检测
- 支持提前唤醒中断
- 支持可配置的预分频系数
二、WWDG工作原理
2.1 基本工作原理
WWDG 的基本工作原理是通过计数器递减来监测系统运行状态。
工作流程:
- WWDG 计数器从初始值开始递减
- 当计数器达到窗口值时,可以喂狗
- 当计数器达到 0x40 时,触发提前唤醒中断
- 当计数器达到 0x3F 时,复位系统
2.2 窗口检测
WWDG 的窗口检测功能确保喂狗操作在规定的时间窗口内进行。
窗口规则:
- 当计数器值大于窗口值时,喂狗无效,复位系统
- 当计数器值小于或等于窗口值且大于 0x40 时,喂狗有效
- 当计数器值小于或等于 0x40 时,喂狗无效,复位系统
示例:
- 初始计数器值:0x7F
- 窗口值:0x60
- 有效喂狗范围:0x40-0x60
2.3 提前唤醒中断
WWDG 支持提前唤醒中断,在计数器达到 0x40 时触发。
中断触发:
- 当计数器达到 0x40 时,触发提前唤醒中断
- 在中断服务函数中可以执行紧急操作
- 如果在中断服务函数中没有及时喂狗,系统将复位
三、WWDG配置与代码实现
3.1 标准库配置步骤
使用标准库配置 WWDG 的基本步骤:
- 使能 WWDG 时钟
- 配置 WWDG 基本参数
- 配置 WWDG 中断(可选)
- 使能 WWDG
3.2 代码实现(WWDG,超时时间 100ms)
#include"stm32f4xx.h"#defineWWDG_WINDOW_VALUE0x50