gpt4 book ai didi

esp32 - `Brownout detector was trigerred`的异常处理

转载 作者:行者123 更新时间:2023-12-03 08:03:21 33 4
gpt4 key购买 nike

我使用 ESP-IDF 作为框架。

我知道Brownout detector was trigerred错误来自检测低电压发生的低电压检测器。通常,当该错误发生时,MCU 会自动重启。

是的,可以设置检测器,但是我可以在软件中处理该错误吗?就像esp-idf如何使用约定esp_err_t处理错误一样?因此我可以继续在我的 MCU 中运行,而不会因此类错误而重新启动。

我的意思是句柄就像如何使用try-catch概念进行高级编程。

最佳答案

发生此错误后,CPU 会复位。可能有一种方法可以在CPU重新启动时找出复位的原因。与 STM32 MCU 一样,可以读取 RCC(复位和时钟 Controller )寄存器。在我的研究过程中,我找到了一个可以与 ESP32 一起使用的解决方案。

#include <rom/rtc.h>

void print_reset_reason(RESET_REASON reason)
{
switch (reason)
{
/**<1, Vbat power on reset*/
case 1 : Serial.println ("POWERON_RESET");break;

/**<3, Software reset digital core*/
case 3 : Serial.println ("SW_RESET");break;

/**<4, Legacy watch dog reset digital core*/
case 4 : Serial.println ("OWDT_RESET");break;

/**<5, Deep Sleep reset digital core*/
case 5 : Serial.println ("DEEPSLEEP_RESET");break;

/**<6, Reset by SLC module, reset digital core*/
case 6 : Serial.println ("SDIO_RESET");break;

/**<7, Timer Group0 Watch dog reset digital core*/
case 7 : Serial.println ("TG0WDT_SYS_RESET");break;

/**<8, Timer Group1 Watch dog reset digital core*/
case 8 : Serial.println ("TG1WDT_SYS_RESET");break;

/**<9, RTC Watch dog Reset digital core*/
case 9 : Serial.println ("RTCWDT_SYS_RESET");break;

/**<10, Instrusion tested to reset CPU*/
case 10 : Serial.println ("INTRUSION_RESET");break;

/**<11, Time Group reset CPU*/
case 11 : Serial.println ("TGWDT_CPU_RESET");break;

/**<12, Software reset CPU*/
case 12 : Serial.println ("SW_CPU_RESET");break;

/**<13, RTC Watch dog Reset CPU*/
case 13 : Serial.println ("RTCWDT_CPU_RESET");break;

/**<14, for APP CPU, reseted by PRO CPU*/
case 14 : Serial.println ("EXT_CPU_RESET");break;

/**<15, Reset when the vdd voltage is not stable*/
case 15 : Serial.println ("RTCWDT_BROWN_OUT_RESET");break;

/**<16, RTC Watch dog reset digital core and rtc module*/
case 16 : Serial.println ("RTCWDT_RTC_RESET");break;

default : Serial.println ("NO_MEAN");
}
}

void setup() {
Serial.begin(115200);
delay(2000);

Serial.println("CPU0 reset reason: ");
print_reset_reason(rtc_get_reset_reason(0));

Serial.println("CPU1 reset reason: ");
print_reset_reason(rtc_get_reset_reason(1));
}

void loop() {}

相关链接

关于esp32 - `Brownout detector was trigerred`的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73200166/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com