对于按键的板极支持包,初始化GPIO(配置为的输入,读取GPIO引脚的电平)
读取按键是否被按下,也就是按键的状态
按键使用PA0和PC13引脚
先创建bsp_key.c和bsp_key.h文件
把bsp_key.c添加到工程中
bsp_key.h编写过程
在这个文件里定义好可以执行的函数,引脚状态
#ifndef _BSP_KEY_H_
#define _BSP_KEY_H_
//引入这个头文件,才能访问HAL函数库
#include "stm32f1xx.h"
//宏定义表示按键状态
#define KEY_ON 1;
#define KEY_OFF 0;
//初始化KEY对应GPIO引脚
void KEY_GPIO_Init(void);
//判断按键状态,自定义2个参数类型,哪个引脚,以及引脚号,有返回值,便于判断状态
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
#endif
bsp_key.c编写过程
#include "./key/bsp_key.h"
void KEY_GPIO_Init(void)
{
GPIO_InitTypeDef KEY_GPIO_Init;
//因为用到了PA0和PC13脚,要让这两个端口使能
//使能PA0引脚
__HAL_RCC_GPIOA_CLK_ENABLE();
//使能PC13引脚
__HAL_RCC_GPIOC_CLK_ENABLE();
//stm32f1xx_hal_gpio.h第116行
//#define GPIO_MODE_INPUT 0x00000000u /*!< Input Floating Mode */
//设置引脚功能
KEY_GPIO_Init.Mode=GPIO_MODE_INPUT;
KEY_GPIO_Init.Pin=GPIO_PIN_0;
KEY_GPIO_Init.Pull=GPIO_NOPULL;
KEY_GPIO_Init.Speed=GPIO_SPEED_FREQ_LOW;
//初始化2个GPIO引脚
HAL_GPIO_Init(GPIOA,&KEY_GPIO_Init);
KEY_GPIO_Init.Pin=GPIO_PIN_13;
HAL_GPIO_Init(GPIOC,&KEY_GPIO_Init);
}
//编写判断按键是否按下的函数
uint8_t Key_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
//判断按键是否被按下,找这个方法可知,GPIO_PIN_SET表示高电平
if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==GPIO_PIN_SET){
//按键被按下
while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==GPIO_PIN_SET);
return KEY_ON;
}else{
//按键未被按下
return KEY_OFF;
}
}
在main.c中完成所需的功能
if(Key_Scan(GPIOA,GPIO_PIN_0)== KEY_ON)
LED_B_Toggle;
if(Key_Scan(GPIOC,GPIO_PIN_13)==KEY_ON)
LED_G_Toggle;