当前位置:   article > 正文

STM32系列——用最简单的方法学会按键长按_stm32 按键长按

stm32 按键长按

目录

前言

1. 按键长按原理

2. Cubmx配置

3. keil5编写代码


前言

本教程基于stm32f103c8t6最小系统板,hal库开发。

操作简单,讲解直接清楚,旨在让大家少走弯路。

1. 按键长按原理

(1)要用1个定时器,设置好定时器周期并打开定时器中断。

(2)每隔一段时间进入定时器中断回调函数判断按键是否按下,若按下,count++,将count转化为想要的时间,例如:定时器周期设置为0.1s,长按按键3s就点亮一个LED。这样的话,每隔0.1s,count++,3s=0.1s*30,至少需要进入中断30次,count>30则LED亮起,否则LED不亮。

2. Cubmx配置

这里用的是定时器1作为定时器中断,时钟源使用内部时钟,定时器周期设置为(720*1000)/72000000=0.01s。定时3s,则0.01*300;

 勾选更新中断。

 按键的配置按实际情况去配置,将GPIO mode配置为输入模式这边是按下输入低电平,默认是高电平,所以我默认上拉。

3. keil5编写代码

main.c文件里。

  1. /* Private user code ---------------------------------------------------------*/
  2. /* USER CODE BEGIN 0 */
  3. /*
  4. 每10ms进入一次该函数,检查一下引脚状态
  5. 可以用定时器,也可以用查询
  6. */
  7. void Key_scan(void)
  8. {
  9. //1 表示高电平,0表示低电平。低电平时按下
  10. uint8_t val = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13);
  11. static uint16_t count=0;
  12. if(!val)//按键按下 记录按下的时间
  13. {
  14. count++;
  15. }
  16. else //按键松开 计数值清零并返回按下的时间值
  17. {
  18. if(count>300)//按下经过3s 300*0.01s=3s
  19. {
  20. //长按3s
  21. key_flag = 2;
  22. }
  23. count=0;
  24. }
  25. }
  26. /**
  27. * @function:void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  28. * @description: 定时器中断回调函数,0.01S中断一次
  29. * @param {TIM_HandleTypeDef *htim}
  30. * @return {*}
  31. */
  32. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  33. {
  34. if(htim==&htim1)
  35. {
  36. Key_scan();
  37. }
  38. }
  39. /* USER CODE END 0 */
  1. /* USER CODE BEGIN 2 */
  2. HAL_TIM_Base_Start_IT(&htim1);//开启TIM1的定时器中断
  3. /* USER CODE END 2 */
  1. /* USER CODE BEGIN 3 */
  2. if(key_flag == 2)//长按3s了
  3. {
  4. LED2_on();//放自己想要的操作
  5. // key_flag = 0;
  6. }
  7. else//没有长按3s
  8. {
  9. LED2_off();//放自己想要的操作
  10. }
  11. }
  12. /* USER CODE END 3 */

注意长按3s以后key_flag=2,注意有其他功能需要的时候,要在合适的地方把key_flag清零,不能在上面注释的地方清零,那样的话LED亮一下子就灭了,因为如果在那清零,每次循环再判断key_flag时,它就不是2了,LED就灭了。

码字不易,希望喜欢的小伙伴别忘了点赞+收藏+关注,你们的肯定就是我创作的动力。

欢迎大家积极交流,本文未经允许谢绝转载!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/712258
推荐阅读
相关标签
  

闽ICP备14008679号