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;

stm32 按键长按,STM32系列,stm32,单片机,嵌入式硬件

 勾选更新中断。

stm32 按键长按,STM32系列,stm32,单片机,嵌入式硬件

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

stm32 按键长按,STM32系列,stm32,单片机,嵌入式硬件

3. keil5编写代码

main.c文件里。

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/*
	每10ms进入一次该函数,检查一下引脚状态
	可以用定时器,也可以用查询
*/
void Key_scan(void)
{
	//1 表示高电平,0表示低电平。低电平时按下	
	uint8_t  val = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13);
	static uint16_t count=0;
	if(!val)//按键按下 记录按下的时间
	{
		count++;
	}
	else //按键松开 计数值清零并返回按下的时间值
	{
		if(count>300)//按下经过3s  300*0.01s=3s
		{
    		//长按3s
			key_flag = 2;
		}
		count=0;
	}
}

/**
 * @function:void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 * @description: 定时器中断回调函数,0.01S中断一次
 * @param {TIM_HandleTypeDef *htim} 
 * @return {*}
 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim==&htim1)
	{
		Key_scan();
	}
}
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim1);//开启TIM1的定时器中断
/* USER CODE END 2 */
/* USER CODE BEGIN 3 */
	  if(key_flag == 2)//长按3s了
	  {
		  LED2_on();//放自己想要的操作
//	  key_flag = 0;
	  }
	  else//没有长按3s
	  {
		  LED2_off();//放自己想要的操作
	  }
  }
  /* USER CODE END 3 */

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

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

欢迎大家积极交流,本文未经允许谢绝转载!!!文章来源地址https://www.toymoban.com/news/detail-616487.html

到了这里,关于STM32系列——用最简单的方法学会按键长按的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103系列之按键控制LED灯

    上篇已经介绍了点灯的操作了,本篇主要介绍按键控制LED灯进行相关操作。 同样,我们需要对GPIO进行相关的初始化配置,这里我们将LED相关的代码全部放在LED.C和LED.H文件里面。 LED.C文件: LED.H文件: 然后我们开始写KEY.C和KEY.H文件里面的相关代码: 首先我们需要知道按键的

    2024年02月05日
    浏览(30)
  • STM32F1系列简单介绍及入门学习

    1.什么是STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星。 STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。AR

    2023年04月19日
    浏览(42)
  • 简单明了的说明STM32的PWM原理以及实现方法

    申明以下都是个人理解,仅供参考。如果错误欢迎指教。本文不讲底层,根据实际使用来逆向讲解。 1.什么是pwm? pwm最简单的理解就是“功率”,调节PWM的占空比就是调节功率。 2.如何调节占空比? 图1   根据图1很容易看出来调节CCRX的值就可以调节占空比,CCRX的值越大,

    2023年04月17日
    浏览(26)
  • STM32-按键检测

    做按键检测时,GPIO为输入操作 读取IO口输入电平调用的 库函数 为: uint8_t GPIO_ReadInputDataBit (GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin); 读取IO口输入电平操作的 寄存器 为: GPIOx_IDR :端口输入寄存器 使用位带操作读取IO口输入电平: PEin(4) -读取GPIOE.4口电平 PEin(n) -读取 GPIOE.n口电平 按键输入

    2024年02月06日
    浏览(39)
  • stm32实现按键控制

    目录 一、实现原理: 1.1 按键控制电路分析 二、程序部分: 1.1 按键控制电路分析     可以看见电路上key_up按键连接3.3v,K1、K2、K3下拉接地。按键检测的时候需要配置输入模式。key_up配置下拉输入:在默认状态下,读取的GPIO引脚为低电平,按键按下时,输入变为高电平。

    2024年02月15日
    浏览(35)
  • STM32—按键中断

    目录 中断简介 程序  注: (1)         EXTI(外部中断):EXTI是ST公司在其STM32产品上扩展的外中断控制。它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断,以及软件中断。其输出最终被映射到NVIC的相应通道。因此,配置EXTI中断的过程 必然包含对NVIC的配置

    2023年04月08日
    浏览(23)
  • 【STM32】 4脚按键

    目录 一:按键说明 二:4脚按键原理图封装 三:4脚按键PCB封装 四:4脚按键实物图+2脚按键实物图 这种开关不能够自锁,但是,每当按下去一次,信号就发生一次跳变。底部 可以表示为 未按下时只有两组引脚连接,按下之后,四个引脚连接在一起。为保证准确, 建议在使用

    2024年02月12日
    浏览(27)
  • 按键输入实验(stm32)

    说明:以下内容参考正点原子资料 参考前面文章:流水灯实验的代码 按键读取函数 IDR:端口输入数据寄存器

    2024年02月13日
    浏览(28)
  • STM32—启用按键

    ​ 目录 1 、电路构成及原理图  2、编写实现代码 main.c  main.h  key.c 3、代码讲解 4、 烧录到开发板调试、验证代码 5、检验效果 本人使用的是朗峰 STM32F103 系列开发板,此笔记基于这款开发板记录。 重要!一定先用短路帽短接板上P5的2-3引脚,否则KEY_WKUP按键无效 通过按键原

    2024年03月14日
    浏览(28)
  • 【stm32----按键中断实验,按键控制LED灯】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1灭; 2、按下KEY2,LED2亮,再次按下KEY2,LED2灭; 3、按下KEY3,LED3亮,再次按下KEY3,LED3灭; 一、头文件 1、gpio.h 2、key.h 二、初始化函数及功能函数 1、gpio.c 2、key.c 三、中断处理函数 do_irq.c 四、主函数 main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包