YIE002开发探索02-按键

本文档详细介绍了如何在STM32开发板YIE002上进行按键编程,包括硬件资源(SW1、SW2、SW3连接到PA6、PA5、PA1)和软件设计。通过CubeMX配置GPIO,编写按键扫描函数实现按键状态检测,并在main函数中控制LED灯亮灭。代码简洁明了,适合初学者学习。
摘要由CSDN通过智能技术生成

(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)
(代码仓库地址:https://gitee.com/luobing4365/yie002-explorer
具体参考博客:YIE002开发探索-Gitee代码仓库说明)



按键实验中,使用GPIO的相关知识就可以了。在上一篇中,已经介绍了GPIO的基本用法,这一篇使用这些知识实现按键的功能。

1 在YIE002-STM32型上编程

在后续的实验中,没有必要每次都重新去配置工程。比如时钟树的配置、调试的配置等,每次都差不多。因此,可以直接在之前的工程上进行修改,添加需要的功能即可。本篇的工程,就是在上一篇的基础上进行修改的。

1.1 硬件资源

YIE002-STM32型上准备了三个按键,如图1所示。
按键的硬件资源
图1 按键的硬件资源

开发板上提供的三个按键SW1、SW2和SW3,分别连接到PA6、PA5和PA1上。从图中可以看出,这三个按键都是低电平有效的。

1.2 软件设计

本篇的实验中,主要使能按键相关的GPIO,再编写相应的按键扫描函数即可。

使能GPIO可以通过Cube MX的图形化编程实现,修改的引脚如图2所示。
修改GPIO引脚配置
图2 修改GPIO引脚配置

重新生成代码,在生成的代码中会自动添加对这三个引脚的初始化语句。

初始化完成后,编写对应的按键扫描函数,内容如下:

/**
  获得按键的状态
  
  @param  void
  @retval 返回对应的按键是否按下,如果没有按键按下,则返回0              
**/
#define KEY1Pressed 1
#define KEY2Pressed 2
#define KEY3Pressed 4
uint8_t GetKey(void)
{
	uint8_t key1,key2,key3;
	static uint8_t keyup=1;
	uint8_t key=0;
	
	key1= HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6);//读取按键1
	key2= HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5);//读取按键2
	key3= HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1);//读取按键3
	
	if(keyup && (key1==0||key2==0||key3==0))
	{
		HAL_Delay(10);    //去抖动
		keyup=0;
		
		if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)) key|= KEY1Pressed;
		if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)) key|= KEY2Pressed;
		if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)) key|= KEY3Pressed;
		return key;
	}
	else if(key1==1 && key2==1 && key3==1)
		keyup=1;
	
	return 0;
}

在main函数的while循环中,实现按键亮灯的功能,添加的代码如下:

 while (1)
 {
    /* USER CODE END WHILE */
		key=GetKey();
		if(key)
		{
			if(key&KEY1Pressed)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
			if(key&KEY2Pressed)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_13);
			if(key&KEY3Pressed)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14);
		}
    /* USER CODE BEGIN 3 */
  }

代码比较简单,就不一一分析了。每个按键控制了一个LED灯,按下后会点亮LED灯,再按则熄灭LED灯。

博客中的代码,实际上都是移植自我以前用Legacy library编写的STM32工程,只不过使用Cube library的函数重新编写了而已。所实现的代码比较简单,主要是为了演示使用方法,方便自己以后查看。

有兴趣的话,可以在此基础上修改,比如实现按键的连按、优先级的调整等。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

luobing4365

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

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

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

打赏作者

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

抵扣说明:

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

余额充值