简介
IWDG(Independent Watchdog,独立看门狗)是 STM32 单片机中用于监测系统运行状态的外设,可防止程序跑飞或死循环。STM32F407 系列芯片配备了 1 个 IWDG,具有独立的 32kHz 低速振荡器(LSI),即使在主时钟失效的情况下也能正常工作,广泛应用于需要高可靠性监测的场景。本文从 IWDG 的基本原理出发,详细讲解 STM32F407 IWDG 的配置方法、代码实现、计数器管理以及实际应用案例,帮助你快速掌握 IWDG 的使用技巧。
一、IWDG核心概念与分类
1.1 基本概念
IWDG 是一个基于计数器的看门狗,其主要特点包括:
- 独立时钟:使用 LSI(32kHz 低速振荡器),不受主时钟影响
- 12 位计数器:支持 12 位递减计数器
- 可配置参数:可配置预分频系数、重装载值等
- 硬件复位:计数器归零时自动复位系统
- 独立运行:独立于主时钟,主时钟失效时仍可正常工作
关键参数:
- 预分频系数:4、8、16、32、64、128、256
- 重装载值:12 位,范围 0x000-0xFFF
- 超时时间:由预分频系数和重装载值决定
1.2 STM32F407 的 IWDG 资源
STM32F407 系统芯片配备了 1 个 IWDG:
| 功能 | 特性 |
|---|---|
| 计数器 | 12 位递减计数器 |
| 时钟源 | LSI(32kHz) |
| 预分频系数 | 4、8、16、32、64、128、256 |
| 重装载值 | 12 位,范围 0x000-0xFFF |
关键特性:
- 支持 12 位递减计数器
- 支持可配置的预分频系数
- 支持硬件复位
- 独立于主时钟
二、IWDG工作原理
2.1 基本工作原理
IWDG 的基本工作原理是通过计数器递减来监测系统运行状态。
工作流程:
- IWDG 计数器从重装载值开始递减
- 在计数器归零之前喂狗,计数器重新加载重装载值
- 如果计数器归零,系统复位
2.2 超时时间计算
IWDG 的超时时间由预分频系数和重装载值决定。
计算公式:
超时时间 = (预分频系数 / LSI频率) × 重装载值
示例:
- LSI 频率:32kHz
- 预分频系数:256
- 重装载值:0xFFF(4095)
- 超时时间 = (256 / 32000) × 4095 = 32.76 秒
三、IWDG配置与代码实现
3.1 标准库配置步骤
使用标准库配置 IWDG 的基本步骤:
- 使能 LSI 时钟
- 等待 LSI 就绪
- 配置 IWDG 基本参数
- 使能 IWDG
3.2 代码实现(IWDG,超时时间 1 秒)
#include"stm32f4xx.h"#defineIWDG_PRESCALER64#