1.硬件
通过查看原理图,我们可以找到我们需要使用的管脚。通过原理图,我们可以看出,按键的两个管脚,分别对应着PE3,PE4两个管脚。这两个管脚按下输出是0,没有按下输出是1,由于没有电容进行硬件消抖,我们需要使用软件去消抖。


2.配置
确定了引脚,我们就要去配置相应的寄存器,使用这些外设了。两个按键对应着GPIOE的3/4引脚,我们需要去初始化GPIOE。初始化GPIO,初学者可以把它当成就是一个模板,本质就是配置结构体,去配置这个结构体然后通过相应的函数去初始化相应的寄存器。(如果对初始化那些寄存器感兴趣的同学,可以去看看STM32的中文参考手册)。
GPIO_InitTypeDef GPIO_InitStructure;
//使能GPIOE时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;//KEY0-KEY1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE4,3
2.1.按键消抖
这两个管脚按下输出是0,没有按下输出是1,由于没有电容进行硬件消抖,我们需要使用软件去消抖。软件消抖其实就是延时后去读按键的值。
delay_ms(10);//去抖动
if(KEY0==0)return KEY0_PRES; // KEY0_PRES是一个宏,其实就是0
if(KEY1==0)return KEY1_PRES; //KEY1_PRES也是一个宏,其实就是1
至于KEY0 和KEY1是什么?就是使用宏定义的函数去读取按键的值,下面会讲。
3.使用KEY
3.1.方法一:原生的函数
上面的代码已经初始化好了按键了,我们使用其实可以通过GPIO提供的函数去控制这些GPIO的管脚信息。
//读取管脚的值
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
根据返回值,结合原理图,可以进行判断按键是否按下。
3.2.自定义宏
自定义宏,其实先自定义函数,在自定义函数里面使用的是标准库给我们提供的函数接口,只不过我们进行了一层封装。(如果简单的,就可以不使用自定义函数了,在宏里面自己调用标准库的函数,使用自定义函数主要是提高宏代码的可读性)
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0
#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读取按键1这样子封装好之后,我们直接使用这个宏就可以了,方便使用了很多。
















