【STM32 HAL库】按键开关

上一章,我们介绍了STM32F4的IO口作为输出的使用,这一章,将向大家介绍如何使用按键作为输入使用。

(一)硬件连接

根据正点原子的stm32f4阿波罗开发板,可以看见

按键KEY0连接在PH3上、

KEY1连接在PH2上、

KEY2连接在PC13上、

KEY_UP连接在PA0 上。

根据电路图分析,当按键KEY0,KEY1、KEY2导通时,PH3、PH2、PC13为低电平;

按键KEY_UP导通时,PA0为低电平。

(图为按下按键开关后,IO后就会从高电平变为低电平)

因此,我们可以通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。

(二)按键消抖

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖

说白了有时候按键输入引脚有低电平不一定代表着是按键按下,可能是干扰信号。因此我们需要通过一些抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。

我们如何去抖动呢?

首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如果还是低电平,则确认是按键触发信号,否则,判断为干扰信号,不予处理。

(三)Hal库读取引脚函数

该函数返回值为该引脚读入的电平状态。

(四)实操

按下KEY2(PC13)按键,DS1(PC0)小灯点亮,反之熄灭。

1.时钟配置

2.IO端口配置

设置PC13为输出引脚

设置PB0为输出模式

//延时和按键函数

void Delay(unsigned int t)
{
    while(t--);
}
void Scan_Key()
{
        if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == RESET)
        {   
                Delay(1000);
                if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == RESET)
                {
                    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
                    while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == SET);
                }
        }
}

在主函数while(1)中调用按键检测函数就好了。

3.实验现象

按键按下前:

按键按下后:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值