1.硬件

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

stm32f103c8t6 cubemx 按键_单片机

 

stm32f103c8t6 cubemx 按键_单片机_02

 

 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

这样子封装好之后,我们直接使用这个宏就可以了,方便使用了很多。