1.通过IDR寄存器循环检测
bsp_key.h
#ifndef __BSP_KEY
#define __BSP_KEY
#include“stm32f10x.h”
#define GPIO_KEY1_PORT GPIOA
#define GPIO_KEY1_PIN GPIO_Pin_0
#define GPIO_KEY1_CLK RCC_APB2Periph_GPIOA
#define KEY_ON 1
#define KEY_OFF 0
void GPIO_KEY1_CONFIG(void);
void GPIO_KEY2_CONFIG(void);
uint8_t KEY_SCAN(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin);
#万一
bsp_key.c
#include“bsp_key.h”
// GPIO初始化函数
void GPIO_KEY1_CONFIG(void)
{
GPIO_InitTypeDef GPIO_KEY1_InitStruct;
RCC_APB2PeriphClockCmd(GPIO_KEY1_CLK,ENABLE);
GPIO_KEY1_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_KEY1_InitStruct.GPIO_Pin = GPIO_KEY1_PIN;
GPIO_Init(GPIO_KEY1_PORT,&GPIO_KEY1_InitStruct);
}
//按键检测
uint8_t KEY_SCAN(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)
{
如果(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_ON)
{
//抬手检测
(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_ON);
返回KEY_ON;
}
否则返回KEY_OFF;
}main.c中
#include“stm32f10x.h”
#include“bsp_led.h”
#include“bsp_key.h”
int main(void)
{
GPIO_LED_CONFIG();
GPIO_KEY1_CONFIG();
GPIO_KEY2_CONFIG();
while(1)
{
if(KEY_SCAN(GPIO_KEY1_PORT,GPIO_KEY1_PIN)== KEY_ON)
GPIO_LED_TOGGLE; }
}
本文介绍了一种基于STM32微控制器的按键检测方法,通过配置GPIO输入浮空模式并利用IDR寄存器循环检测按键状态。该方法适用于需要简单可靠按键输入的应用场景。
782

被折叠的 条评论
为什么被折叠?



