赞
踩
1、掌握GPIO 输入模式控制
2、学会STM32CubeMX配置GPIO的输入模式
3、具体目标:1、按键K1按下,LED1点亮;2、按键K2按下,LED1熄灭;2、按键K3按下,LED2状态取反;
STM32的GPIO共有8种工作模式
按下按键和松开按键的瞬间都是存在机械抖动的。这种抖动可分为前抖动(按下瞬间带来的抖动),后抖动(松开瞬间带来的抖动),如下图所示。无论是前抖动还是后抖动,持续时间大约是5~10ms。
单片机检测按键时会出现误以为按键多次按下的情况:
当按下一次按键,可能在A点检测到一次低电平,在B点检测到一次高电平,在C点又检测到一次低电平。同时抖动是随机,不可测的。那么按下一次按键,抖动可能会误以为按下多次按键。
因此我们可以通过软件延时来进行消抖。
说明:1、开发板上有三个按键,每个按键都设计得有上拉电阻,当按键按下时,对应单片机检测管脚电平为低电平,当没有按键按下,对应的管脚默认为高电平。
配置:1、3个按键设置为输入模式GPIO_Input ,并分别取名为LED1,LED2,LED3,LED4;2、4个LED设置为输出模式Output Push Pull .并分别取名为S1,S2,S3 .
1、在 while(1)中编写代码
- if (HAL_GPIO_ReadPin(GPIOB, S1_Pin) == 0)//按键K1按下
- {
- HAL_Delay(20);//延时消抖
- if (HAL_GPIO_ReadPin(GPIOB, S1_Pin) == 0)
- {
- HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_RESET);//LED1点亮
-
- }
- }
- if (HAL_GPIO_ReadPin(GPIOB, S2_Pin) == 0)//按键K2按下
- {
- HAL_Delay(20);//延时消抖
- if (HAL_GPIO_ReadPin(GPIOB, S2_Pin) == 0)
- {
- HAL_GPIO_WritePin(GPIOB, LED1_Pin, GPIO_PIN_SET);//LED1熄灭
-
- }
- }
- if (HAL_GPIO_ReadPin(GPIOB, S3_Pin) == 0)//按键K3按下
- {
- HAL_Delay(20);//延时消抖
- if (HAL_GPIO_ReadPin(GPIOB, S3_Pin) == 0)
- {
- HAL_GPIO_TogglePin(GPIOB, LED2_Pin);//LED2状态取反
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。