KEY1没有按下时,GPIO是低电平
KEY1按下时,GPIO是高电平
检测GPIO电平,判断KEY1有没有被按下
按键KEY1引脚宏定义
//bsp_key.h
#define KEY1_GPIO_PIN GPIO_Pin_0
#define KEY1_GPIO_PORT GPIOA
#define KEY1_GPIO_CLK RCC_APB2Periph_GPIOB
按键KEY1初始化
//bsp_key.c
void KEY_GPIO_Config(void)
{
//新建一个GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStruct;
//开启时钟
RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK, ENABLE);
//添加结构体成员参数
GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;
//原理图中外部下拉输入
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//初始化函数:结构体成员写入CRL寄存器
GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStruct);
}
检测按键有没有被按下
//bsp_key.h
#define KEY_ON 1
#define KEY_OFF 0
//bsp_key.c
uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON )
{
//松手检测
while( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON );
return KEY_ON;
}
else return KEY_OFF;
}
绿灯翻转
//bsp_led.h
//反转,异或
#define LED_G_TOGGLE {LED_G_GPIO_PORT->ODR ^=LED_G_GPIO_PIN;}
main函数
//main.c
int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
LED_GPIO_Config();
KEY_GPIO_Config();
while(1)
{
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
LED_G_TOGGLE;
}
}
在这里插入代码片