7.24. LONG_PRESS_RESET
Overview
提供长按复位接口使用方法和常见问题。
7.24.1. 应用示例
示例演示:
长按复位可4秒或8秒复位。
example: 进入 apps/demo/demo_DevKitBoard/include/demo_config.h
,开启宏 USE_LONG_PRESS_RESET_TEST_DEMO
。
Note
board.c 添加长按IO配置和4秒/8秒配置:
/************************** PWR wakeup config ****************************/
//#define PORT_VCC33_CTRL_IO IO_PORTA_03 //VCC33 DCDC控制引脚,该引脚控制DCDC器件输出的3.3V连接芯片HPVDD、VDDIO、VDD33
#define PORT_WAKEUP_IO IO_PORTB_01 //软关机和休眠唤醒引脚
#define PORT_WAKEUP_NUM (PORT_WAKEUP_IO/IO_GROUP_NUM)//默认:0-7:GPIOA-GPIOH, 可以指定0-7组
//软关机硬件唤醒IO相关配置
static const struct port_wakeup port0 = {
.edge = FALLING_EDGE, //唤醒方式选择,可选:上升沿\下降沿
.attribute = BLUETOOTH_RESUME, //保留参数
.iomap = PORT_WAKEUP_IO, //唤醒口选择
.low_power = POWER_SLEEP_WAKEUP|POWER_OFF_WAKEUP, //低功耗IO或睡眠唤醒,不需要写0
};
//正常工作长按复位IO配置
static const struct long_press lpres_port = {
.enable = TRUE, //是否使用长按复位,TRUE为使能,FALSE则禁能
.use_sec4 = TRUE, //enable = TRUE , use_sec4: TRUE --> 4 sec , FALSE --> 8 sec
.edge = FALLING_EDGE, //长按方式,可选:FALLING_EDGE / RISING_EDGE --> 低电平/高电平
.iomap = PORT_WAKEUP_IO, //长按复位IO和IO唤醒共用一个IO
};
//保留参数,无需更改
static const struct sub_wakeup sub_wkup = {
.attribute = BLUETOOTH_RESUME,
};
//保留参数,无需更改
static const struct charge_wakeup charge_wkup = {
.attribute = BLUETOOTH_RESUME,
};
//唤醒参数配置
static const struct wakeup_param wk_param = {
.port[0] = NULL,//当需要IO唤醒,详情soft_power_off例子
.sub = &sub_wkup,
.charge = &charge_wkup,
.lpres = &lpres_port,//当使用正常工作时可长按复位功能,详情longpress例子
};
//电源初始化
static void board_power_init(void)
{
power_wakeup_init(&wk_param);//唤醒参数初始化,包括长按复位
}
7.24.2. 常见问题
长按复位IO,默认根据配置边缘选择性的开启内部上下拉(下降沿则上拉,上升沿则下拉),因此长按复位硬件IO使用和唤醒IO不一样时,可以不用外接上下拉电阻;当长按复位硬件IO使用和唤醒IO为同一个IO时,长按功能不受影响,但IO需要外接上下拉来维持IO唤醒时的软关机后IO电平。
长按复位功能是
board.c
配置好对应程序后,系统上电运行就自动加载长按功能,因此系统运行后可以长按按键来完成复位功能。