WDT 看门狗
1.实验目的
学习看门狗的复位操作。
2.实验原理
看门狗(Watchdog Timer,简称 WDT)是一种用于防止程序死锁或卡死的硬件定时器。它的主要作用是在系统出现异常时自动重启设备,从而恢复正常运行,确保系统的稳定性和可靠性。
在嵌入式系统或单片机运行中,有时由于各种原因(如程序逻辑错误、电磁干扰、内存泄漏等),主程序会陷入死循环或卡死,不能继续执行。此时如果没有外部干预,系统将一直停在那里。
看门狗的作用就是让系统在发生故障时自动恢复!
3.代码解析
导入模块
from machine import WDT # 导入 WDT(看门狗定时器)模块
import time
from machine import Pin # 导入控制 GPIO 引脚的模块
WDT
:用于看门狗定时器
Pin
:用于控制 GPIO 引脚,比如点亮或熄灭 LED
time
:用于延时控制
创建对象
wdt = WDT(1, 3) # 创建一个编号为1的看门狗对象,超时时间为3秒
创建一个 看门狗定时器 对象。
1
表示使用的是 WDT1(编号),3
是看门狗超时秒数。
如果超过 3 秒未喂狗,系统将会重启。
创建控制灯
led = Pin(33, Pin.OUT) # 创建一个控制 GPIO33 引脚的对象,设置为输出模式
喂狗操作
for i in range(3):
time.sleep(1) # 延时1秒
led.value(1) # 点亮LED灯
print(i) # 打印当前循环次数
wdt.feed() # 喂狗,重置看门狗计时器
time.sleep(0.5) # 等待0.5秒
led.value(0) # 熄灭LED灯
这个 for
循环模拟正常运行时的喂狗操作,一共进行 3 次:
- 每次循环:
- 延时1秒后点亮LED
- 喂狗一次(系统正常)
- 等待0.5秒后熄灭LED
每喂一次狗,LED 灯亮一次再熄灭,表示一次“心跳”。
模拟程序异常
while True:
time.sleep(0.01) # 主程序空转,不再喂狗
- 程序进入一个无限循环,模拟“程序卡死”或异常状态。
- 此时 没有再喂狗,看门狗计时器会在 3 秒后超时触发系统重启。
4.示例代码
'''
本程序遵循GPL V3协议, 请遵循协议
实验平台: DshanPI CanMV
开发板文档站点 : https://eai.100ask.net/
百问网学习平台 : https://www.100ask.net
百问网官方B站 : https://space.bilibili.com/275908810
百问网官方淘宝 : https://100ask.taobao.com
'''
from machine import WDT, Pin, FPIOA # 导入模块
import time
# 映射 GPIO33 到普通 GPIO 功能
fpioa = FPIOA()
fpioa.set_function(33, FPIOA.GPIO33)
# 初始化 LED 引脚为输出
led = Pin(33, Pin.OUT)
# 构建看门狗对象,编号1,超时时间3秒
wdt = WDT(1, 3)
# 每隔1秒喂一次狗,执行3次
for i in range(3):
time.sleep(1)
print("喂狗次数:", i + 1)
# 点亮 LED
led.value(1)
wdt.feed() # 喂狗
time.sleep(0.5) # LED亮0.5秒
led.value(0) # 熄灭 LED
# 停止喂狗,系统会在3秒后自动复位
while True:
time.sleep(0.5)
5.实验结果
在CanMV IDE中运行示例代码,每次喂狗都会控制灯闪烁,最后会模拟系统卡死,重 启系统。