用Arduino写个ESP32看门狗

4 篇文章 0 订阅
1 篇文章 0 订阅

        参考了很多网上的关于ESP32看门狗文章,很多设置不正确,看门狗不起作用!无意间在Arduino软件的示例程序中翻到个Watchdog例程,打工一看,恍然大悟,原来就是个定时中断嘛!只不过中断程序执行一条复位指令就行了!我去,我以前认识中都觉得看门狗应该是独立的一个硬件,就只能看门,根本就没想他也可以是一个定时器!

        但软件中那个例程不够让我满意,干脆做个看门狗封装,方便以后使用.程序非常简单,有注释,大家一看就明白了.下面贴出代码,欢迎批评指正.

模块文件:Watchdog.c

/*
 * ESP32看门狗对象使用方法:
 * 1、引用对象定义文件(本文件):#include "Watchdog.C"
 * 2、申明看门狗对象变量:WATCHDOG Watchdog;
 * 3、初始化对象:Watchdog.begin();//默认使用定时器0,10秒超时。//也可以Watchdog.begin(1,1000);//指定定时器和超时时间。
 * 4、喂狗:Watchdog.feed();
 */
#ifndef ESP_RT_WDT_H  //避免重复定义.
  #define ESP_RT_WDT_H  
  #include "esp_system.h"
  class WATCHDOG {
    private:
      hw_timer_t *timer = NULL;//定时器对象.
      uint8_t Timerindex=0;//硬件定时器编号.默认定时器0.
      uint16_t Timeout=10000;//定时器计数.默认10秒超时.
    protected:
      static void Callback(){
        //定时器溢出回调函数,直接复位.
        esp_restart();
      }
      void Init(){
        if(timer!=NULL){timerEnd(timer);}//如果之前有设置过定时器,则关闭相应的定时器.
        timer=timerBegin(Timerindex,80,true);//使用硬件定时器,预分频80,向上计数。
        timerAttachInterrupt(timer,Callback,true);//设置回调函数,边延触发。
        timerAlarmWrite(timer,Timeout*1000,true);//设定中断计数器值,自动重启计数(循环定时)。CPU主频80MHz/80/1000=1毫秒。
        timerAlarmEnable(timer);//开启定时器。
      }
    public:
      WATCHDOG(){Timerindex=0;Timeout=10000;}
      void begin(){Init();}
      void begin(uint8_t Esp_Timerindex,uint16_t Esp_Timerout){Timerindex=Esp_Timerindex,Timeout=Esp_Timerout;begin();}
      void feed(void){timerWrite(timer,0);}//喂狗.
  };
#endif

验证程序文件Watchdog.ino

#include "Watchdog.C"
uint8_t button=0;//按键IO--D0(GPIO0)
WATCHDOG Watchdog;//看门狗对象.
void setup() {
  Serial.begin(115200);//串口波特率.
  Serial.println("系统复位!");//打印启动信息,以指示模块已经复位.
  pinMode(button,INPUT_PULLUP);//按键IO输入模式.
  Watchdog.begin();//默认定时器0,10秒超时.
  //Watchdog.begin(1,1000);//看门狗初始化,使用定时器1,1秒超时.
}

void loop() {
  Watchdog.feed();//喂狗.
  long loopTime = millis();
  while (!digitalRead(button)) {;}//如果按键超过设定时间,则会因来不及喂狗而超时.
  loopTime=millis()-loopTime;
  if(loopTime>1){Serial.printf("\r\n按键时间:%d毫秒.",loopTime);}//按键未超时则显示按键所用时间.
}

如果按键超时,就全重启,

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值