Detección de LLAVE del botón STM32

Prefacio

En los capítulos anteriores, aprendimos sobre la función de salida GPIO En esta sección, aprendimos acerca de la función de entrada GPIO, entrada clave.

1. Esquemático

Inserte la descripción de la imagen aquí
Pin PA0, cuando no se presiona K1, PA0 es bajo, y cuando se presiona K1, es alto.

Dos, pasos de programación

1. Habilite el reloj del puerto GPIO
2. Inicialice los pines GPIO y configure el modo de entrada (entrada flotante)
3. Verifique el estado del botón y controle las luces LED

Luz de control GPIOB Botón de control GPIOA bsp_key.h

//根据原理图找到对应的时钟
#define KEY_GPIO_PORT    	GPIOA			              
#define KEY_GPIO_CLK 	    RCC_APB2Periph_GPIOA		
#define KEY_GPIO_PIN		GPIO_Pin_0	
	
#define Toggle(p,i) {p->ODR ^=i;} 
#define LED_TOGGLE		 Toggle(LED_GPIO_PORT,LED_GPIO_PIN)//设置ODR实现反转功能

bsp_key.c GPIO_Mode está configurado para flotar

void KEY_GPIO_Config(void)
{
    
    		
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd( KEY_GPIO_CLK, ENABLE);

		GPIO_InitStructure.GPIO_Pin = KEY_GPIO_PIN;	
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
		GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);				
}
//检测按键状态
//返回值 The input port pin value 
//检测按键是否按下,GPIO_ReadInputDataBit库函数,按下为高电平 
uint8_t Key_Detect(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
    
    
		if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == ON)
		{
    
    
				while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == ON);
				return ON;
		}
		else
			return OFF;
}

Función principal main.c

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_key.h"

int main(void)
{
    
    	
	LED_GPIO_Config();	 	  
    KEY_GPIO_Config();
	GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);// 先将灯熄灭
	while(1)
	{
    
    
		if(Key_Detect(KEY_GPIO_PORT,KEY_GPIO_PIN) == ON)
		{
    
    
			digitalToggle(LED_GPIO_PORT,LED_GPIO_PIN);
		}
	}
}

Supongo que te gusta

Origin blog.csdn.net/WANGYONGZIXUE/article/details/115048264
Recomendado
Clasificación