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中运行示例代码,每次喂狗都会控制灯闪烁,最后会模拟系统卡死,重启系统。
