想要实现长按开机、长按关机、轻触开关锁屏等功能,电路需要使用:
1)单片机的两个I/O,KEY_ON(PA13 IN) 与 PWR_EN(PA12 OUT)。其中 KEY_ON配置为输入引脚,PWR_EN配置为推挽输出。
2)两个二极管D1、D2,其作用相当于或门,只要有一端输入为高电平,SW_EN都会为高电平,反之就会被STM内置下拉电阻 将输出拉低。而只要SW_EN为高电平,XC6209就会为系统持续供电。
3)MOS管Q2,用于将按键电平VIN,转换为单片机的电压轨3.3V,防止VIN烧毁单片机的I/O。单片机读取KEY_ON引脚的电平,就可以得到按键状态。Q2可以用三极管代替,但三极管的关断漏电流要比MOS高得多得多,会使待机功耗增加。
void sin_key()
{
if((HAL_GPIO_ReadPin(KEY_ON_GPIO_Port,KEY_ON_Pin)==GPIO_PIN_RESET)&&stat==0)
{
HAL_Delay(2000);
if((HAL_GPIO_ReadPin(KEY_ON_GPIO_Port,KEY_ON_Pin)==GPIO_PIN_RESET))
{
HAL_GPIO_WritePin(PWR_EN_GPIO_Port,PWR_EN_Pin,GPIO_PIN_SET);
while((HAL_GPIO_ReadPin(KEY_ON_GPIO_Port,KEY_ON_Pin)==GPIO_PIN_RESET));
stat++;
}
}
if((HAL_GPIO_ReadPin(KEY_ON_GPIO_Port,KEY_ON_Pin)==GPIO_PIN_RESET)&&stat==1)
{
while((HAL_GPIO_ReadPin(KEY_ON_GPIO_Port,KEY_ON_Pin)==GPIO_PIN_RESET));
HAL_GPIO_WritePin(PWR_EN_GPIO_Port,PWR_EN_Pin,GPIO_PIN_RESET);
}
}