• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作

人工智能 better_coder 2990次浏览 0个评论

SysTick_Handler介绍

今天我给大家分享一个基于SysTick_Handler中断实现的按键扫描。SysTick_Handler是HAL库配置的stmf103芯片里运行时会每隔1ms被调用的一个回调函数,所以我在这个回调函数里面写了按键读取的程序Key_Scan();(这个是我参考别的大佬的程序,侵权的话请评论,马上删除),这个函数每隔1ms会在回调函数里面被调用一次STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作按键接法是这样的,自然状态下引脚读取时高电平按键按下时引脚读取时低电平STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作  


程序介绍

程序流程图如图所示:

STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作  

这个程序判断按键按下需要2个条件:  

  • 按键持续按下时间超过32ms
  • 按键在非按下状态

那这个程序是怎么实现消抖的呢?很简单,按键弹起的时候一直都是高电平,程序需要读到连续的32个毫秒的低电平才会判断为按键按下   这个判定为高电平时按键按下的时间的话每个调试者的习惯都不太一样,具体应用的时候可以根据实际情况做一个微调   计时期间哪怕有一个低电平的抖动,sw1Count计数器都会清零,重新开始32毫秒的计数,因此实现了消抖,而且程序在判断到了按键按下之后pushFlag1置1,这样在按键续按下的时候就不会识别为多个按键按下的操作。  

uint8_t sw1Count;
uint8_t pushFlag1;
void Key_Scan(void)
{
         /*检测SW1是否按下 */
	if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == GPIO_PIN_RESET )
	{
		 sw1Count++;                         //SW1键按下,计数sw1Count加1
		 if(sw1Count>=32)                    //1MS中断一次,sw1Count大于等于32,即按键已按下32ms
		 {
				if(pushFlag1==0)                //判断有没有重按键,1为有,0为没有
				{
					swState1=1;                       //设置按键标志				
                                        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,1);
					sw1Count=0;
					pushFlag1=1;                     //设置重按键标志
				}
				else
					sw1Count=0;
		 }
		 else
				swState1=0;
	}
	else                                            //无按键按下
	{
		 sw1Count=0;                           //清零sw1Count
		 swState1=0;                            //清除按键标志
		 pushFlag1=0;                          //清除重按键标志
	}
}

按键识别应用

按键识别之后一般是作为用户的输入应用,在我的工程里面我是将按键输入作为退出我的while(1)循环的条件 STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作那么为什么我要用中断来作为我读取按键的方法呢?轮询他不香吗?但是请仔细看我的程序,我的程序大部分时间都是在处理串口的收发,在单核的芯片中,因为一次处理串口的时间比较久,如果说用轮询控制按键的话很可能会因为我按下按键的时候刚好芯片在处理串口,这样我按下按键的动作就会被忽略了,这样就会造成按下了好几次的按键,但是芯片就是不会响应按键的情况,造成了极差的用户体验,但是中断就不一样了,只要满足中断条件,那么芯片就一定会响应,相应的变量就会改变,这就做到了即使芯片需要做长时间的连续工作,也可以准确响应我的按键动作。  


                                               (づ ̄3 ̄)づ╭❤~一键三连,这次一定(๑•̀ㅂ•́)و✧ 

STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作      


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作
喜欢 (0)

您必须 登录 才能发表评论!

加载中……