STM32单片机学习记录3——GPIO(下)输入模式按键触发事件

1、硬件准备

我使用的是市面上常见的黑色开发板,烧入器使用的是正点原子的无线烧入器,普通的烧入器也行,这个无所谓。开发板的原理图我放在下面链接里,我们需要知道相应的KEY引脚。
在这里插入图片描述
在这里插入图片描述

2、预期功能

通过按键的输入模式控制LED灯的亮灭。

3、程序编写

3.1、CUBEMX部分

在配置之前我们需要知道板子上按键对应的引脚,查看原理图可知KEY0-PE4,KEY1-PE3。同时,我们知道当按键按下的时候引脚连接的为低电平,因此当按键没有被按下时应该为高电平,我们则要设置为上拉。
在这里插入图片描述
我们直接在上一节的部分修改添加代码,先复制整个项目工程,重命名之后打开相应的cubemx,添加如下配置。
在这里插入图片描述
在这里插入图片描述
完成配置之后我们生成代码。

3.2、keil部分

同样我们新建key.c与key.h,将其添加进我们的项目中。
key.c:

#include "key.h"

/* *****************KEY函数***************** */
// KEY1
uint8_t KEY1_Style(void)
{
	uint8_t i;
	// 如果按键被按下
	if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET)
	{
		// 按键消除抖动,延迟检测
		HAL_Delay(10);
		// 检测按键时候还是闭合状态
		if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET){
			// 标志位置1
			i = 1;
		}
	}
	// 如果按键没有被按下
	else{
		// 标志位置0
		i = 0;
	}
	
	return i;
}

// KEY0
uint8_t KEY0_Style(void)
{
	uint8_t i;
	// 如果按键被按下
	if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET)
	{
		//  按键消除抖动
		HAL_Delay(10);
		// 检测按键时候还是闭合状态
		if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET){
			// 标志位置1
			i = 1;
		}
	}
	// 如果按键没有被按下
	else{
		// 标志位置0
		i = 0;
	}
	
	return i;
}

key.h:

#ifndef __KEY_H__
#define __KEY_H__

#include "main.h"

uint8_t KEY1_Style(void);
uint8_t KEY0_Style(void);

#endif

main.c

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(KEY0_Style() == 1)
		{
			LED1_Style(1);
			LED2_Style(1);
		}
		if(KEY0_Style() == 0)
		{
			LED1_Style(2);
			LED2_Style(2);
		}
  }
  /* USER CODE END 3 */

其他位置没有添加代码。
这个效果就是通过按键控制相应的LED灯。

4、源码链接

链接:https://pan.baidu.com/s/1jaz4ydbUhfRIXNyahHWHGA
提取码:1234

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

把金轮按在墙上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值