STM32-按键扫描配置

问题引入

由于在使用例程中的按键时,发现按键无效,经过Debug发现程序进入按键扫描死循环中。

由于初始按键引脚时,按键引脚上拉,按下为高电平。给的引脚配置为浮空输入(不确定高低电平),导致初始按键引脚电平初始就为高,所以导致无论按键按下与否,按键引脚一直为高。

使得按键扫描函数,一直在while中,无法退出,程序无法往下运行。

经过改正,初始按键引脚下拉即可解决上述问题。

复制代码
GPIO_InitStructure.Pull = GPIO_PULLDOWN;

/**
  * @brief   检测是否有按键按下
  * @param   具体的端口和端口位
  *		@arg GPIOx: x可以是(A...G) 
  *		@arg GPIO_PIN 可以是GPIO_PIN_x(x可以是1...16)
  * @retval  按键的状态
  *		@arg KEY_ON:按键按下
  *		@arg KEY_OFF:按键没按下
  */
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			
	/*检测是否有按键按下 */
	if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON )  
	{	 
		/*等待按键释放 */
		while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON);   
		return 	KEY_ON;	 
	}
	else
		return KEY_OFF;
}

/**
  * @brief  配置按键用到的I/O口
  * @param  无
  * @retval 无
  */
void Key_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /*开启按键GPIO口的时钟*/
    KEY1_GPIO_CLK_ENABLE();
    KEY2_GPIO_CLK_ENABLE();
  
    /*设置引脚为输入模式*/
    GPIO_InitStructure.Mode = GPIO_MODE_INPUT; 
    /*设置引脚不上拉也不下拉*/
    GPIO_InitStructure.Pull = GPIO_PULLDOWN;
  
    /*选择按键的引脚*/	
    GPIO_InitStructure.Pin = KEY1_PIN; 
    /*使用上面的结构体初始化按键*/
    HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);
  
    /*选择按键的引脚*/
    GPIO_InitStructure.Pin = KEY2_PIN; 
    /*使用上面的结构体初始化按键*/
    HAL_GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);
    

}

知识扩展

1.理论分析

理论情况按键的电压波形应该为方波

但是实际按键电压波形,会有电压抖动,我们需要通过延时来进行按键消抖,这里需要用到延时函数delay_ms()。

1.2按键扫描程序逻辑

通过分析,我们可以知道。

  • 第一步,判断是否有按键按下,有按键按下时,将继续执行,没有按键按下时,将返回0,即没有按键按下。
  • 第二步,当判断为有按键按下时,判断为key0还是key1,当为key0时,返回1,即为按键1按下;当为key1时,返回为2,即为按键2按下。

2.程序编写

如上所示。

相关推荐
Zw-awa11 分钟前
从 CPU 搬运到自动搬运:DMA、空闲中断和两块缓冲
stm32
无敌贵点大王33 分钟前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何37 分钟前
二进制和十六进制
stm32·单片机
国科安芯2 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
TST-魚爷2 小时前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
不昀4 小时前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵5 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯6 小时前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管
集芯微电科技有限公司7 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷7 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件