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

标签 esp32

我使用 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/

相关文章:

wifi - ESP32 : Error when activating Wi-Fi interface

cpu-usage - 测量 ESP32 CPU 利用率

c - 如何通过 gatt 从 esp32 的 hid ble 键盘发送扫描代码 >255?

c - 如何合并/馈送两个 uint8_t 缓冲区?

c++ - ESP32 转 ESP32 WiFi 服务器/客户端问题

python - 加密 IV - C 和 Python 等效

c++ - 错误无效使用 void 表达式。试图将参数传递给函数

c - 链接错误: cannot find -lrdkafka pre-compiled dynamic library in PlatformIO

c - 在esp32中使用深度 sleep 时void setup()代码是否被清除

i2c - MPU-6050 : Correctly reading data from the FIFO register