STM32学习笔记——按键输入

隔了好久才写这第二篇,期间重感冒,身体难受大约十天,今天重新写,又踩了好多的坑。

1:首先,按键实验是GPIO口的另一应用,上一次的跑马灯实验是将GPIO口作为输出,此次按键实验是将GPIO口作为输入

和跑马灯实验实验一样,要启用GPIO口,第一步要做的就是使能GPIO所在的时钟总线,具体库函数操作为:RCC_APB2PeriphClockCmd(GPIOA,ENABLE);

2:接下来说说GPIO作为输入时和输入的不同:

(1):首先需要了解按键是低电平有效还是高电平有效,因为此处需要配置GPIO口的输入模式。大家都知道GPIO口有四种输入模式,四种输出模式(具体请看我的第一篇笔记)。我使用的是STM32F103C8T6,按键s2为低电平有效,故,此处配置输出模式时应为上拉输入模式,即GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

注:关于为什么低电平有效就用上拉输入,这里多讲几句。

首先,上拉电阻是为了保证在没有信号输入的时候,IO口保持高电平,若按键为低电平有效,则没有信号的时候,IO应呈现高电平,所以,此处应设置为上拉输入。

同理,下拉电阻是为了保证在没有信号输入的时候,IO口保持低电平,若按键为高电平有效,则没有信号的时候,IO应呈现低电平。


然后再配置一下IO口引脚,初始化PA0即可。作为输入时,不需要配置速度。


(2)GPIO口各项功能配置完毕之后就是编写按键函数。库函数操作为:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);若是很简单要实现按键控制LED灯的功能,只需如下的代码:STM32学习笔记——按键输入_第1张图片 

这里led灯的转换是通过位带操作的,具体操作是在LED.h里写如下代码:#define LED0 PAout(0)即可



考虑道按键防抖,写了如下的按键扫描函数:

STM32学习笔记——按键输入_第2张图片




这里在编写主函数的时候还有一个大坑,我很好奇,但是不知道为什么。

STM32学习笔记——按键输入_第3张图片

这里的按键扫描函数还需要在主函数中声明一次,不然会出现warning : function "KEY_Scan()"declared implaitility.可我明明在头文件里添加了key.h了。。。。











你可能感兴趣的:(STM32学习笔记——按键输入)