解决arduino IDE ESP32 硬件看门狗设置与喂狗失败问题 以及看门狗 Task Watchdog Timer 相关设置方法

本文详细介绍了如何解决Arduino IDE中ESP32硬件看门狗设置与喂狗失败的问题,提供了启用、配置及喂养看门狗的代码示例。通过rtc_wdt_protect_off()关闭写保护并使用rtc_wdt_feed()喂狗,确保程序在长时间运行时不会因看门狗超时而复位重启。设置超时时间为7000ms,并在循环中适当位置放置喂狗操作,可避免看门狗触发复位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决arduino IDE ESP32 硬件看门狗设置与喂狗失败问题 以及 看门狗定时器(TWDT) Task Watchdog Timer 相关设置方法


前言

解决arduino IDE ESP32 硬件看门狗设置与喂狗失败问题 困扰了不少ESP32的用户这里给出解决办法,以及看门狗定时器(TWDT) Task Watchdog Timer 相关设置方法


二、使用步骤

1.引入库

代码如下:

#include "soc/rtc_wdt.h"     //设置看门狗用

2.设置代码

代码如下(示例):

#include "soc/rtc_wdt.h"     //设置看门狗用

void setup() {

//ESP32看门狗设置 需要先引入 #include "soc/rtc_wdt.h" //设置看门狗用
  rtc_wdt_protect_off();     //看门狗写保护关闭 关闭后可以喂狗
  //rtc_wdt_protect_on();    //看门狗写保护打开 打开后不能喂狗
  //rtc_wdt_disable();       //禁用看门狗
  rtc_wdt_enable();          //启用看门狗
  rtc_wdt_feed();            //喂狗
  rtc_wdt_set_time(RTC_WDT_STAGE0, 7000);     // 设置看门狗超时 7000ms.
 //如果解决了您的问题与困扰 支持原创 给个赞或者打个赏,您的支持是我们进步的动力
}

3.喂狗代码使用示例

代码如下(示例):

//通过以上设置,需要关闭看门狗写保护 rtc_wdt_protect_off();  然后用这个函数进行喂狗,亲测可用

rtc_wdt_feed();    //喂狗函数 放入需要长时间执行的程序里 示例如下:

void loop() {

  //长时间执行代码示例
  while(true) {
    rtc_wdt_feed();            //喂狗
    //您的循环执行长时间的代码
    //您的循环执行长时间的代码
    //您的循环执行长时间的代码
  }
}

//如果解决了您的问题与困扰 支持原创 给个赞或者打个赏,您的支持是我们进步的动力
 

总结

通过以上设置,需要关闭看门狗写保护 rtc_wdt_protect_off(); 然后用这个函数进行喂狗,亲测可用。以上是解决看门狗复位重启的问题,可以长时间不用再loop循环,也可以不至于触发看门狗复位重启

如果解决了您的问题与困扰 支持原创 给个赞或者打个赏,您的支持是我们进步的动力

### ESP32 复位代码实现 以下是基于 Arduino IDEESP32 复位功能的代码示例。通过调用 `ESP.restart()` 函数可以轻松实现设备复位的功能[^1]。 ```cpp void setup() { Serial.begin(115200); delay(1000); // 延迟一秒以便串口初始化完成 Serial.println("Device is about to reset..."); // 调用复位函数 ESP.restart(); // 使用此方法重启 ESP32 设备 } void loop() { // 主循环为空,因为复位后程序会重新启动 } ``` 上述代码会在执行到 `ESP.restart()` 后立即触发硬件级别的复位操作,并使设备重新进入 `setup` 阶段[^2]。 如果需要更复杂的控制逻辑或者自定义行为,在调用 `ESP.restart()` 之前可以通过设置标志变量或其他方式保存状态信息,从而在下次启动时恢复特定的状态或继续未完成的任务。 #### 更深入的应用场景 对于某些特殊需求,可能还需要结合看门狗定时器 (Watchdog Timer, WDT) 来强制复位设备。以下是一个简单的看门狗启用并触发复位的例子: ```cpp #include "soc/timer_group_struct.h" #include "driver/watchdog.h" void setup() { Serial.begin(115200); // 初始化看门狗定时器 esp_task_wdt_init(5, true); // 设置超时时间为 5 秒,并允许自动喂狗 Serial.println("Watchdog timer initialized..."); while(true){ delay(6000); // 故意延迟超过设定时间以触发看门狗中断 Serial.println("Waiting for watchdog timeout..."); } } void loop() {} ``` 在这个例子中,当主循环中的延时超过了看门狗计时器所设的时间限制,则会发生异常情况导致系统崩溃进而引发自动复位过程[^1]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值