stm32单按键启停

想要实现长按开机、长按关机、轻触开关锁屏等功能,电路需要使用:

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);
	}
	
		
}


 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dodo_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值