STM32学习笔记(HAL库配CubeMX)(第二天:按键扫描)

隔了两天才来更新,因为这两天课还挺多的。每天都有三节课,晚上才来实验室。实在是有些时间捉急了。今天主要是学习按键检测。

按键扫描的基本原理:

首先:按键两个引脚的一端通过上拉电阻到高电平,另一端接地(上拉电阻引脚平时就是输入高电平,如果下拉电阻平时就是低电平)

同时:为了检测,就是去读取引脚现在的电平高低。一般用扫描来做。

其中:需要去抖动,也就是去除干扰信号或者说噪声之类的。因为电平触发再短时间内是会出现信号的极大干扰的(怎么去解释呢,就像你刚刚拉闸放水,然后水冲击河岸的时候会激起浪花,此时的流速不稳定之类的,我是这样去思考的)。一般这时候,我们最简单的方法就是通过延时,然后让我们的单片机读取最稳定时候的电流,不然存在干扰信号的时候,单片机容易误读或者停止工作啥的。

今天的函数:

GPIO_PinState   HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOX  ,  uint_16 GPIO_Pin);

电平输入函数

其他需要的函数就是延时函数,还有第一天搞得那个GPIO_Write和GPIO_TogglePin

可以通过这个东西来进行一个小小的例子。

比如说我手上有一个野火F103RC的开发板。先看原理图,然后找到相应的一个LED和按键的位置。通过按键来控制灯的亮灭。

那么接下来就实现以下功能

由于野火的开发板MINI上一共只有2个按键KEY,所以说只做两个功能

通过KEY1控制LED1开关,KEY2控制LED2开关。

同样的,通过基于GPIO低电平输出,两个按键上拉电阻输入来配置我的文件。

之后呢,就开始进行如一个编程的思路:

首先,做一个按键扫描函数,用来读取什么呢,就是读取按键的电平。然后需要进行判别。和51一样,就用if。然后其中使用去抖动的延时。大概的就是这样一个方式。

首先来看一下延时函数和去抖动函数,非常的简单:

#ifndef _KEY_SET_
#define _KEY_SET_

#include "main.h"
#include "gpio.h"

void Delay(unsigned int t){

	while(t--);
}



void Scan_Key()
{
	if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET)
	{
		Delay(1000);
		if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET)
		{
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);
			while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET);
		}	
	}
}



#endif

由于我本人再main.c函数中进行定义的时候出现了一些报错且一直无法解决,所以我将它做成了一个叫做hanshu.h的头文件,之后就没问题了。

然后就是主函数部分:

while(1)
{
        Scan_Key();

}

对,就这一句话。然后输进去之后,解决下引用或者符号之类的小问题,基本就可以实现一个引脚控制一个灯亮灭的问题了。非常的简单。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ReedswayYuH.C

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

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

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

打赏作者

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

抵扣说明:

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

余额充值