一文讲透 WDT 看门狗:原理、类型与应用,新手入门指南
在单片机系统中,由于其运行环境通常复杂且容易受到外界电磁场等因素的干扰,可能会出现以下问题:
- 寄存器和内存数据混乱:外界电磁干扰可能会导致寄存器或内存中的数据被意外修改,影响程序的正常执行
- 程序指针错误:程序指针可能会由于数据错误或干扰而指向非预期的存储位置,导致系统执行错误的指令
- 陷入死循环:如果程序指针跳转到了错误的位置,程序可能会进入一个无限循环无法跳出,导致系统停滞
- 系统停滞:当程序被卡住或无法执行正确的指令时,整个系统可能会陷入停滞状态,无法执行预期的操作
为了解决这些问题,看门狗定时器(Watchdog Timer, WDT)在系统中发挥了以下关键作用,看门狗定时器(Watchdog Timer, WDT)是一种用于监控系统运行状况的硬件定时器。它的主要作用是防止系统陷入死循环或卡死状态。当系统软件正常运行时,它需要定期重置看门狗定时器。如果系统出现故障而没有及时重置看门狗定时器,定时器会触发系统重启或其他预定义的动作,以确保系统能恢复到正常状态。

看门狗命令在程序的中断中拥有最高的优先级:这意味着无论系统在执行什么任务,看门狗定时器的复位信号都可以中断当前任务并进行复位
其基本工作原理为:
- 启动看门狗定时器:看门狗定时器的核心是一个简单的倒数定时器,用于在特定时间间隔后重置微处理器,当看门狗定时器被启用后,它会开始倒计时
- 定期重置:正常运行的程序需要在看门狗定时器的倒计时完成之前定期重置它(我们俗称“feed 喂狗”或“kick 踢狗”),这通常是通过在主程序循环或定时器中调用重置看门狗的函数来实现的
- 系统复位:如果看门狗定时器倒计时结束而没有被重置,通常会导致系统复位(重启),这有助于系统从异常状态中恢复
从工作原理上来看,看门狗可分为独立看门狗(Independent Watchdog, IWDG)和窗口看门狗(Window Watchdog, WWDG):
-
独立看门狗(
IWDG):IWDG 是完全独立于主处理器的看门狗定时器,通常由一个独立的低功耗振荡器(例如 32kHz 的低频晶振或内部的 RC 振荡器)驱动,这使得它能够在主处理器故障或主时钟失效时继续工作;IWDG 的设计非常简单且可靠,计数器减少为 0 会产生复位,一旦 IWDG 被启动,通常无法通过软件停止或禁用,通常用于避免程序跑飞或者死循环缺少示例图
-
窗口看门狗(
WWDG):WWDG 的关键特性是有一个“窗口期”,即看门狗定时器必须在这个特定的时间窗口内被重置,如果重置发生得太早或太晚,WWDG 会触发系统复位,这种机制有效地防止了程序陷入死循环或过早、过晚地重置看门狗;WWDG 通常依赖于系统主时钟或其他高频时钟源,因此如果系统主时钟失效,WWDG 可能无法正常工作,通常用于避免程序不按预定逻辑执行,比如先于理想环境完成,或者后于极限时间超时

STM32 中的窗口看门狗外设,窗口看门狗有上限和下限值,窗口看门狗计数器在窗口上限值(自己设置)和下限值(0x40)内喂狗就不会产生复位,同时窗口看门狗的初始值是七位递减,初始值需要自己设置,最大为 0x7F,并且可以通过设置配置寄存器的提前唤醒中断位实现在计数器减少到 0x40 时产生中断
从组成结构上看,看门狗可分为内置看门狗外设和外置看门狗芯片:
- 内置看门狗外设(On-chip Watchdog Timer):内置看门狗是微控制器(MCU)内部的一部分,通常在芯片中作为一个标准外设存在,这意味着它与其他外设(如定时器、UART 等)共享相同的时钟和资源

树莓派 Pico 的内置看门狗外设
- 易于使用:由于看门狗定时器是内置的,开发人员可以直接通过 MCU 的寄存器进行配置和控制,无需额外的硬件或连接
- 集成度高:内置看门狗具有很高的集成度,可以通过 MCU 内部的时钟和电源管理单元实现低功耗监控
- 受限于 MCU 本身的故障:如果
MCU的主时钟或其他关键资源发生故障,内置看门狗可能会受到影响,例如,如果MCU进入不可恢复的故障状态(如主时钟失效),内置看门狗可能无法正常工作。 - 外置看门狗芯片(External Watchdog Timer):外置看门狗芯片是一个独立的集成电路,与 MCU 通过 GPIO 或其他接口进行连接,这使得它能够在 MCU 发生严重故障时仍能正常工作。

SP706 外置看门狗芯片,内置了看门狗定时器和电源监控功能
- 高度可靠性:由于外置看门狗芯片是独立运行的,它通常能够在 MCU 故障时继续监控并执行复位操作。这种独立性使得它在高可靠性要求的应用中尤为重要。
- 灵活性高:外置看门狗芯片通常具有更多的配置选项和功能,例如更精确的定时控制、可编程的超时窗口,以及不同的复位选项(如硬复位或软复位)。
- 复杂度和成本:外置看门狗芯片需要额外的硬件电路和连接,增加了系统的复杂性和成本。这在某些成本敏感的应用中可能是一个限制因素。
从实现方式上来看,看门狗可分为软件看门狗和硬件看门狗:
- 软件看门狗:软件看门狗完全由软件代码实现,通常在操作系统或应用程序层面定期检查系统状态并触发相应的动作(如复位或警告),开发人员在代码中定期重置软件计时器,防止它超时;如果软件看门狗超时,系统可以触发某种响应,如软件复位或执行故障处理程序
- 依赖主处理器:由于软件看门狗是通过软件实现的,它依赖于主处理器和操作系统的正常运行。如果系统的主要功能(如时钟、内存管理)出现严重故障,软件看门狗可能无法正常工作
- 灵活性:软件看门狗具有很高的灵活性,可以根据应用的需要进行配置和调整。开发人员可以设置不同的超时时间、警报机制,甚至在不同的条件下触发不同的处理方式
- 复杂度和资源占用:软件看门狗需要消耗一定的处理器资源,尤其是在实时性要求高的系统中,这可能会影响系统性能,此外,实现软件看门狗的逻辑和代码复杂度可能较高
- 硬件看门狗:硬件看门狗是由独立的硬件电路实现的,通常作为微控制器(MCU)或处理器芯片中的一个独立外设,也可以是一个外部的独立芯片。硬件看门狗有一个独立的定时器,必须在设定的时间内被重置,否则会触发系统复位或其他预定义的动作
- 独立性和可靠性:硬件看门狗不依赖于主处理器的运行,它通常由独立的时钟源驱动,因此即使系统的主要功能出现故障,硬件看门狗仍然可以正常工作。这使得它非常可靠,尤其在关键任务系统中。
- 低资源占用:硬件看门狗几乎不占用处理器资源,系统只需定期触发看门狗复位信号,对系统性能的影响很小。
- 一旦启用,通常不可关闭:许多硬件看门狗在启动后无法通过软件关闭,以确保系统始终处于受监控状态,这种特性在关键任务系统中尤为重要。
这里,在制作项目时,建议大家在使用内置看门狗定时器外设的同时,额外配备一个外置看门狗芯片:当 MCU 本身的硬件出现故障(例如电源电压波动、时钟故障、内存损坏等)时,内置的 WDT 可能也会受到影响,导致无法正常复位系统,而外部 WDT 可以完全独立于 MCU 的正常功能运行,不受 MCU 内部资源限制的影响。
简单来说,外部 WDT 提供了额外的安全层,增加了系统的冗余性和可靠性防止单点故障导致整个系统崩溃,确保即使在最坏的情况下,系统仍然能够安全地复位并继续运行。

在单片机系统中,由于其运行环境通常复杂且容易受到外界电磁场等因素的干扰,可能会出现以下问题:
浙公网安备 33010602011771号