基于stm32cubeIDE用C语言写一段stm 32代码,用GPIO查询模式读按键,并消抖
时间: 2023-03-20 16:01:37 浏览: 117
STM32学习2:GPIO输入实验——读取按键状态
好的,以下是基于stm32cubeIDE用C语言写一段stm 32代码,用GPIO查询模式读按键,并消抖的示例代码:
```c
#include "stm32f4xx.h"
#define DEBOUNCE_DELAY 50 // 消抖延时,单位为毫秒
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
uint8_t button_state = 0; // 按键状态,0 表示未按下,1 表示已按下
uint32_t last_debounce_time = 0; // 上次消抖时间
/* 初始化GPIO时钟 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* 配置GPIO为输入模式 */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; // 将PA0配置为输入引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; // 输入模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 上拉电阻
GPIO_Init(GPIOA, &GPIO_InitStruct);
while (1)
{
/* 查询按键状态 */
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == GPIO_Pin_RESET) // 检测到按键按下
{
/* 消抖处理 */
if ((HAL_GetTick() - last_debounce_time) > DEBOUNCE_DELAY) // 检测到按键状态变化超过 DEBOUNCE_DELAY 毫秒
{
button_state = !button_state; // 取反按键状态
last_debounce_time = HAL_GetTick(); // 记录本次消抖时间
}
}
}
}
```
以上代码中,我们首先初始化了GPIO时钟并配置PA0为输入模式,接着进入了一个while循环,循环中不断查询按键状态。当检测到按键按下时,我们进行消抖处理,即检测到按键状态变化超过 DEBOUNCE_DELAY 毫秒后,将按键状态取反,同时记录本次消抖时间。
阅读全文