当前位置:网站首页>Arduino框架下ESP32重启原因串口信息输出示例
Arduino框架下ESP32重启原因串口信息输出示例
2022-08-02 03:38:00 【perseverance52】
Arduino框架下ESP32重启原因串口信息输出示例
当前示例代码编译基于固件版本:
2.0.4
在程序开发初期debug是非常有必要的。用于排查和分析程序重启原因,从而改进和优化代码。
这里使用的程序烧录的板子型号为:
ESP32C3


- 该程序示例可以在:
C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4\libraries\ESP32\examples\ResetReason路径下找到。 - 本示例不需要安装第三方库,但是需要引用对应的核心库当中的头文件才行。
示例代码
/* * Print last reset reason of ESP32 * ================================= * * Use either of the methods print_reset_reason * or verbose_print_reset_reason to display the * cause for the last reset of this device. * * Public Domain License. * * Author: * Evandro Luis Copercini - 2017 */
#ifdef ESP_IDF_VERSION_MAJOR // IDF 4+
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
#include "esp32/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32S2
#include "esp32s2/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C3
#include "esp32c3/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32S3
#include "esp32s3/rom/rtc.h"
#else
#error Target CONFIG_IDF_TARGET is not supported
#endif
#else // ESP32 Before IDF 4.0
#include "rom/rtc.h"
#endif
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */
void print_reset_reason(int reason)
{
switch ( reason)
{
case 1 : Serial.println ("POWERON_RESET");break; /**<1, Vbat power on reset*/
case 3 : Serial.println ("SW_RESET");break; /**<3, Software reset digital core*/
case 4 : Serial.println ("OWDT_RESET");break; /**<4, Legacy watch dog reset digital core*/
case 5 : Serial.println ("DEEPSLEEP_RESET");break; /**<5, Deep Sleep reset digital core*/
case 6 : Serial.println ("SDIO_RESET");break; /**<6, Reset by SLC module, reset digital core*/
case 7 : Serial.println ("TG0WDT_SYS_RESET");break; /**<7, Timer Group0 Watch dog reset digital core*/
case 8 : Serial.println ("TG1WDT_SYS_RESET");break; /**<8, Timer Group1 Watch dog reset digital core*/
case 9 : Serial.println ("RTCWDT_SYS_RESET");break; /**<9, RTC Watch dog Reset digital core*/
case 10 : Serial.println ("INTRUSION_RESET");break; /**<10, Instrusion tested to reset CPU*/
case 11 : Serial.println ("TGWDT_CPU_RESET");break; /**<11, Time Group reset CPU*/
case 12 : Serial.println ("SW_CPU_RESET");break; /**<12, Software reset CPU*/
case 13 : Serial.println ("RTCWDT_CPU_RESET");break; /**<13, RTC Watch dog Reset CPU*/
case 14 : Serial.println ("EXT_CPU_RESET");break; /**<14, for APP CPU, reseted by PRO CPU*/
case 15 : Serial.println ("RTCWDT_BROWN_OUT_RESET");break;/**<15, Reset when the vdd voltage is not stable*/
case 16 : Serial.println ("RTCWDT_RTC_RESET");break; /**<16, RTC Watch dog reset digital core and rtc module*/
default : Serial.println ("NO_MEAN");
}
}
void verbose_print_reset_reason(int reason)
{
switch ( reason)
{
case 1 : Serial.println ("Vbat power on reset");break;
case 3 : Serial.println ("Software reset digital core");break;
case 4 : Serial.println ("Legacy watch dog reset digital core");break;
case 5 : Serial.println ("Deep Sleep reset digital core");break;
case 6 : Serial.println ("Reset by SLC module, reset digital core");break;
case 7 : Serial.println ("Timer Group0 Watch dog reset digital core");break;
case 8 : Serial.println ("Timer Group1 Watch dog reset digital core");break;
case 9 : Serial.println ("RTC Watch dog Reset digital core");break;
case 10 : Serial.println ("Instrusion tested to reset CPU");break;
case 11 : Serial.println ("Time Group reset CPU");break;
case 12 : Serial.println ("Software reset CPU");break;
case 13 : Serial.println ("RTC Watch dog Reset CPU");break;
case 14 : Serial.println ("for APP CPU, reseted by PRO CPU");break;
case 15 : Serial.println ("Reset when the vdd voltage is not stable");break;
case 16 : Serial.println ("RTC Watch dog reset digital core and rtc module");break;
default : Serial.println ("NO_MEAN");
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(2000);
Serial.println("CPU0 reset reason:");
print_reset_reason(rtc_get_reset_reason(0));
verbose_print_reset_reason(rtc_get_reset_reason(0));
Serial.println("CPU1 reset reason:");
print_reset_reason(rtc_get_reset_reason(1));
verbose_print_reset_reason(rtc_get_reset_reason(1));
// Set ESP32 to go to deep sleep to see a variation
// in the reset reason. Device will sleep for 5 seconds.
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
Serial.println("Going to sleep");
esp_deep_sleep(5 * uS_TO_S_FACTOR);
}
void loop() {
// put your main code here, to run repeatedly:
}
/* Example Serial Log: ==================== rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0x00 clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0008,len:8 load:0x3fff0010,len:160 load:0x40078000,len:10632 load:0x40080000,len:252 entry 0x40080034 CPU0 reset reason: RTCWDT_RTC_RESET RTC Watch dog reset digital core and rtc module CPU1 reset reason: EXT_CPU_RESET for APP CPU, reseted by PRO CPU Going to sleep ets Jun 8 2016 00:22:57 rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0x00 clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0008,len:8 load:0x3fff0010,len:160 load:0x40078000,len:10632 load:0x40080000,len:252 entry 0x40080034 CPU0 reset reason: DEEPSLEEP_RESET Deep Sleep reset digital core CPU1 reset reason: EXT_CPU_RESET for APP CPU, reseted by PRO CPU Going to sleep ets Jun 8 2016 00:22:57 rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0x00 clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0008,len:8 load:0x3fff0010,len:160 load:0x40078000,len:10632 load:0x40080000,len:252 entry 0x40080034 CPU0 reset reason: DEEPSLEEP_RESET Deep Sleep reset digital core CPU1 reset reason: EXT_CPU_RESET for APP CPU, reseted by PRO CPU Going to sleep */

边栏推荐
猜你喜欢

复制延迟案例(2)-读己之写

吴恩达机器学习系列课程笔记——第十八章:应用实例:图片文字识别(Application Example: Photo OCR)

jetracer_pro_2GB AI Kit system installation instructions

Scientific research notes (5) SLAC WiFi Fingerprint+ Step counter fusion positioning

Andrew Ng's Machine Learning Series Course Notes - Chapter 18: Application Example: Image Text Recognition (Application Example: Photo OCR)

多主复制的适用场景(1)-多IDC

允许Traceroute探测

el-select和el-tree结合使用-树形结构多选框

科研笔记(七) 基于路径规划和WiFi指纹定位的多目的地室内导航

Pycharm平台导入scikit-learn
随机推荐
el-select和el-tree结合使用-树形结构多选框
日本痴汉打赏女主播1.5亿,结果。。。
Your device is corrupt. It cant‘t be trusted and may not work propely.
七分钟深入理解——卷积神经网络(CNN)
The CCF brush topic tour - the first topic
ES6中变量的使用及结构赋值
v-bind动态绑定
吴恩达机器学习系列课程笔记——第八章:神经网络:表述(Neural Networks: Representation)
el-dropdown(下拉菜单)的入门学习
CaDDN代码调试
多主复制下处理写冲突(4)-多主复制拓扑
Deep Blue Academy - Fourteen Lectures of Visual SLAM - Chapter 4 Homework
多主复制的适用场景(1)-多IDC
最后写入胜利(丢弃并发写入)
详解CAN总线:什么是CAN总线?
如何让固定点的监控设备在EasyCVR平台GIS电子地图上显示地理位置?
面试官:大量请求 Redis 不存在的数据,从而打倒数据库,有什么方案?
复制延迟案例(2)-读己之写
普氏分析法-MATLAB工具箱函数
深蓝学院-视觉SLAM十四讲-第七章作业
