STM32F103 窗口看门狗
STM32F103C8T6 使用 HAL 库配置窗口看门狗(WWDG)
1. 硬件设计
1.1 相关硬件
- STM32F103C8T6 最小系统开发板
- STLink-V2 下载器
- 供电电源(USB 供电或外部 3.3V/5V)
1.2 WWDG 硬件原理
- STM32F103C8T6 内部集成窗口看门狗(WWDG),用于防止系统运行异常。
- WWDG 使用 APB1 时钟(典型值 36MHz)进行分频计数。
- 需要在特定时间窗口内刷新,否则会触发复位。
- 主要参数:
- 预分频器:控制计数速度。
- 计数器值:倒计时到 0 触发复位。
- 窗口值:限制喂狗的时间范围。
2. 窗口看门狗原理
2.1 WWDG 结构
- 计数器:范围 0x40-0x7F,每次喂狗只能在窗口范围内进行。
- 预分频器:分频比影响计数器的递减速度。
- 复位机制:计数器降到 0x3F 时触发复位。
- 喂狗时机:必须在窗口值内更新计数器,否则系统复位。
2.2 WWDG 超时时间计算
超时时间计算公式如下:
Timeout = ((Counter - 0x40) * (Prescaler / Fwwdg))
例如,Fwwdg = 36MHz / 4096,预分频设为 8,窗口值设为 0x50,初始计数器设为 0x7F:
Timeout = ((0x7F - 0x40) * (8 / (36MHz / 4096)))
3. 软件设计
3.1 配置 WWDG 步骤
- 初始化 WWDG 结构体。
- 设置预分频器、窗口值、初始计数器值。
- 启动 WWDG。
- 在窗口范围内定期喂狗。
3.2 示例代码
#include "stm32f1xx_hal.h"
WWDG_HandleTypeDef hwwdg;
void SystemClock_Config(void);
void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
// 配置 WWDG,预分频为 8,窗口值 0x50,初始计数器值 0x7F
hwwdg.Instance = WWDG;
hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
hwwdg.Init.Window = 0x50;
hwwdg.Init.Counter = 0x7F;
hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;
if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
{
Error_Handler();
}
while (1)
{
HAL_Delay(20); // 适当延时,确保在窗口范围内喂狗
HAL_WWDG_Refresh(&hwwdg);
}
}
void SystemClock_Config(void)
{
// 省略系统时钟配置代码
}
void Error_Handler(void)
{
while (1);
}
4. 详细操作步骤
4.1 创建 STM32CubeMX 工程
- 打开 STM32CubeMX,选择 STM32F103C8T6 芯片。
- 在“Configuration”选项中,启用 WWDG。
- 设置预分频器、窗口值、计数器值。
- 生成代码,并使用 Keil 或 STM32CubeIDE 打开。
4.2 编译并下载程序

- 连接 STLink-V2 到开发板。
- 使用 STM32CubeIDE 或 Keil 进行编译。
- 通过 STLink-V2 烧录程序。
4.3 运行与调试
- 上电运行代码。
- 观察系统是否定期喂狗,防止复位。
- 若在
HAL_Delay(20);处修改时间超过窗口值,系统会自动复位。
5. 总结
本文介绍了 STM32F103C8T6 窗口看门狗(WWDG)的原理、配置方法以及示例代码。通过配置 WWDG,可以有效防止系统卡死,提高系统的稳定性和可靠性。

浙公网安备 33010602011771号