Arduino 中的看门狗定时器


看门狗定时器是任何微控制器的基本部分。如果程序停留在某处,它会重置该程序。简单来说,看门狗定时器的运作方式如下 -

  • 定时器会一直递增。

  • 该程序必须确保它会一直重置该定时器,即不允许它溢出。

  • 如果定时器溢出,则表示该程序停留在某处,因此无法重置该定时器。在定时器溢出时会生成一个中断,该中断会重置微控制器。

要在 Arduino 中实施看门狗定时器,我们使用 avr wdt 库。

代码如下 -

#include<avr/wdt.h>
void setup() {
   Serial.begin(9600);
   wdt_disable(); //Disable WDT
   delay(3000);
   wdt_enable(WDTO_2S); //Enable WDT with a timeout of 2 seconds
   Serial.println("WDT Enabled");
}
void loop() {
   for(int i = 0; i<5; i++)
   {
      Serial.println("Looping");
      delay(1000);
      wdt_reset(); //Reset the watchdog
   }
   while(1); //Watchdog timer should get triggered here
}

如你所见,我们初始化 Serial 然后首先禁用看门狗定时器。然后引入 3 秒的延迟。程序不会在此处重置,因为看门狗已禁用。现在,启用了超时时间为 2 秒的看门狗定时器。这意味着,如果程序不能每 2 秒重置一次该定时器,那么看门狗就会被触发并重启微控制器。

在循环中,我们首先打印到 Serial 5 秒,确保每秒重置一次看门狗。到目前为止,该程序运行良好。然后,我们进入一个无限的 while 循环。在这里,由于我们没有重置 wdt,因此它将被触发并重启 Arduino。

请注意,预置的看门狗超时值范围为 15 毫秒到 8 秒。

更新于:2021 年 7 月 24 日

超过 7K 的浏览量

开启你的 职业生涯

完成课程认证

开始
广告
© . All rights reserved.