7.27. SYSTEM_RESET_REASON
Overview
提供系统复位使用方法和常见问题。
7.27.1. 应用示例
示例演示:
长按复位可4秒或8秒复位。
example: 进入 apps/demo/demo_DevKitBoard/include/demo_config.h
,开启宏 USE_SYSTEM_RESET_REASON_TEST_DEMO
。
Note
1、使用说明
系统上电运行后自动调用 system_reset_reason_get();
来获取系统复位信息,同时也打印出系统复位原因,例如:
========= system reset reason: SOFT =========
2、系统复位原因
system_reset_reason_get() 函数返回值对应的位表示不同的复位原因,可获取复位原因后做其他的操作(比如IO唤醒则检测是不是长按还是短按,或者闹钟唤醒时更改闹钟时间等),对应CPU的头文件 ``system_reset_reason.h ``。
enum sys_reset_type { SYS_RST_NONE = 0, SYS_RST_12V = BIT(1),//1.2V内核复位 SYS_RST_WDT = BIT(2),//看门狗复位 SYS_RST_VCM = BIT(3),//复位键复位 SYS_RST_SOFT = BIT(4),//软件复位 SYS_RST_ALM_WKUP = BIT(5),//闹钟唤醒复位 SYS_RST_PORT_WKUP = BIT(6),//IO唤醒复位 SYS_RST_LONG_PRESS = BIT(7),//长按复位 SYS_RST_VDDIO_PWR_ON = BIT(8),//上电复位 SYS_RST_VDDIO_LOW_PWR = BIT(9),//低电压复位 };
复位原因解析:
1.2V内核复位:一般不会出现。
看门狗复位:程序跑飞或者程序死循环导致不能清狗。
复位键复位:芯片的VCM复位引脚被置高电平(3.3V左右)。
软件复位:系统调用cpu_reset()或者system_reset()。
闹钟唤醒复位:使用RTC并且使能闹钟唤醒功能后软关机到达唤醒时间。
IO唤醒复位:软关机后IO被触发唤醒。
上电复位:一般正常通电启动就是上电复位。
低电压复位:电压不足。
7.27.2. 常见问题
长按复位IO,默认根据配置边缘选择性的开启内部上下拉(下降沿则上拉,上升沿则下拉),因此长按复位硬件IO使用和唤醒IO不一样时,可以不用外接上下拉电阻;当长按复位硬件IO使用和唤醒IO为同一个IO时,长按功能不受影响,但IO需要外接上下拉来维持IO唤醒时的软关机后IO电平。
长按复位功能是board.c配置好对应程序后,系统上电运行就自动加载长按功能,因此系统运行后可以长按按键来完成复位功能。