外观
看门狗定时器
2025-10-29
本文将详细介绍如何通过 RT-Thread 操作系统使用 WDT(Watchdog Timer,看门狗定时器)模块,实现定期喂狗、超时复位等功能。该示例以 RuiChing Studio 平台的硬件看门狗为基础,帮助用户掌握 WDT 外设的典型应用流程。
Watchdog Timer
WDT 是一种防止系统异常死机的重要硬件机制。它通过一个倒计时定时器,当系统在指定时间内未对其进行“喂狗”操作(即重置倒计时),WDT 会触发系统复位或中断,帮助系统从不可恢复的错误中自动恢复。
超时时间表
通过查阅 WDT IP 文档,WDT 支持的 16 档超时时间如下(以 24MHz 时钟为例),并自动向上取整:
| 超时时间(秒) | 超时时间(秒) | 超时时间(秒) | 超时时间(秒) |
|---|---|---|---|
| 0.0027 | 0.0437 | 0.6990 | 11.1844 |
| 0.0054 | 0.0873 | 1.3980 | 22.3688 |
| 0.0109 | 0.1747 | 2.7961 | 44.7376 |
| 0.0218 | 0.3495 | 5.5922 | 89.4752 |
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
看门狗示例相关代码
rt_device_open(device, RT_DEVICE_FLAG_RDWR):以可读可写的方式打开看门狗设备;rt_device_control(device, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout):设置看门狗的超时时间;rt_device_control(device, RT_DEVICE_CTRL_WDT_START, RT_NULL):启动看门狗rt_device_control(device, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL):喂狗。
wdt_example.c
static rt_device_t device = RT_NULL;
static rt_uint32_t timeout = 11; // 设置超时时间为 11s
static int wdt_example(void)
{
rt_uint32_t cnt = 0;
device = rt_device_find("wdt0"); // 初始化看门狗
if (device == RT_NULL)
{
LOG_E("find wdt failed!");
return (-RT_ERROR);
}
// 设置超时时间并启动看门狗
rt_device_open(device, RT_DEVICE_FLAG_RDWR);
rt_device_control(device, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);
rt_device_control(device, RT_DEVICE_CTRL_WDT_START, RT_NULL);
while (cnt < 6)
{
cnt++;
rt_device_control(device, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL); // 喂狗操作
LOG_I(
"feed watchdog, current ostick is %dms", rt_tick_get_millisecond());
rt_thread_mdelay(10000);
}
return RT_EOK;
}运行程序
开发板运行程序后,在终端输入 wdt_example 命令,结果如下:
在整个命令执行期间,系统将执行以下操作:
启动看门狗设备,将超时时间设置为 11 秒,每隔 10 秒对看门狗进行一次喂狗操作,连续执行 6 次。随后停止喂狗,系统在超过看门狗超时时间后能够被正确重置并重新运行,看门狗复位机制正常工作。
