【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32
Wifi蓝牙无线开发板CH340 4M内存
{花雕动手做}项目之七:WeMos D1R32 打印上次复位原因
实验开源代码
- /*
- 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
- 实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32
- Wifi蓝牙无线开发板CH340 4M内存
- {花雕动手做}项目之七:WeMos D1R32 打印上次复位原因
- */
-
- #include <rom/rtc.h>
-
- #define uS_TO_S_FACTOR 1000000 // 微秒转换为秒的因子
-
- // 打印复位原因的函数
- void print_reset_reason(RESET_REASON reason) {
- switch ( reason) {
- case 1 : Serial.println ("电池上电复位"); break; // 电池上电复位
- case 3 : Serial.println ("软件复位"); break; // 软件复位
- case 4 : Serial.println ("看门狗复位"); break; // 看门狗复位
- case 5 : Serial.println ("深度睡眠复位"); break; // 深度睡眠复位
- case 6 : Serial.println ("SDIO模块复位"); break; // SDIO模块复位
- case 7 : Serial.println ("计时组0看门狗复位"); break; // 计时组0看门狗复位
- case 8 : Serial.println ("计时组1看门狗复位"); break; // 计时组1看门狗复位
- case 9 : Serial.println ("RTC看门狗复位"); break; // RTC看门狗复位
- case 10 : Serial.println ("入侵复位"); break; // 入侵复位
- case 11 : Serial.println ("计时组复位CPU"); break; // 计时组复位CPU
- case 12 : Serial.println ("软件复位CPU"); break; // 软件复位CPU
- case 13 : Serial.println ("RTC看门狗复位CPU"); break; // RTC看门狗复位CPU
- case 14 : Serial.println ("外部CPU复位"); break; // 外部CPU复位
- case 15 : Serial.println ("电压不稳定复位"); break; // 电压不稳定复位
- case 16 : Serial.println ("RTC看门狗复位数字核心和RTC模块"); break; // RTC看门狗复位数字核心和RTC模块
- default : Serial.println ("无意义复位");
- }
- }
-
- // 打印详细复位原因的函数
- void verbose_print_reset_reason(RESET_REASON reason) {
- switch ( reason) {
- case 1 : Serial.println ("电池上电复位"); break;
- case 3 : Serial.println ("软件复位数字核心"); break;
- case 4 : Serial.println ("传统看门狗复位数字核心"); break;
- case 5 : Serial.println ("深度睡眠复位数字核心"); break;
- case 6 : Serial.println ("由SLC模块复位,复位数字核心"); break;
- case 7 : Serial.println ("计时组0看门狗复位数字核心"); break;
- case 8 : Serial.println ("计时组1看门狗复位数字核心"); break;
- case 9 : Serial.println ("RTC看门狗复位数字核心"); break;
- case 10 : Serial.println ("入侵测试复位CPU"); break;
- case 11 : Serial.println ("计时组复位CPU"); break;
- case 12 : Serial.println ("软件复位CPU"); break;
- case 13 : Serial.println ("RTC看门狗复位CPU"); break;
- case 14 : Serial.println ("应用CPU由主CPU复位"); break;
- case 15 : Serial.println ("电压不稳定时复位"); break;
- case 16 : Serial.println ("RTC看门狗复位数字核心和RTC模块"); break;
- default : Serial.println ("无意义复位");
- }
- delay(1000);
- }
-
- void setup() {
- // 初始化,代码只运行一次
- Serial.begin(115200);
- delay(2000);
-
- Serial.println("CPU0复位原因:");
- print_reset_reason(rtc_get_reset_reason(0));
- verbose_print_reset_reason(rtc_get_reset_reason(0));
-
- Serial.println("CPU1复位原因:");
- print_reset_reason(rtc_get_reset_reason(1));
- verbose_print_reset_reason(rtc_get_reset_reason(1));
-
- // 设置ESP32进入深度睡眠以观察复位原因的变化。设备将休眠5秒钟。
- esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
- Serial.println("进入睡眠模式");
- esp_deep_sleep(5 * uS_TO_S_FACTOR);
- }
-
- void loop() {
- // 主代码,在 setup() 执行完毕后重复运行
- }
复制代码
|