当按下一个按键时,系统是如何检测到的呢?
我们通过LED灯的亮灭状态来间接完成按键检测。当按下按键时,LED灯亮,再次按下时,LED灯灭。
要完成这个实验,我们就会用到GPIO外设的基本输入功能。
查阅开发板的按键原理图,如图3-1。
![](https://i-blog.csdnimg.cn/blog_migrate/c2b0c6fdcd454708f591630f97444104.png)
图3-1
图中的K1、K2即为按键。以K1为例,当未按下按键时,其PA0引脚处于接地状态,即低电平,按下按键时,引脚接到电源,输入状态为高电平。所以只要我们检测按键对应引脚(这里是PA0)的输入电平状态,即可判断按键是否被按下。这便是按键的检测原理了。
有一点需要知道,由于机械按键的弹性作用,按下按键时并不会马上稳定接通或断开,即存在按键抖动。一般情况下我们需要通过软件或硬件的方式消抖才能得到理想的实验效果。软件消抖如通过定时器延时等方式,忽略前后的抖动;而硬件消抖,如可以利用电容的充放电延时等方式。本文默认已经进行过消抖处理了。
直接开始编程环节的分析。
首先得使能GPIO端口的时钟,然后初始化按键和LED灯的引脚,最后通过读取引脚不同电平状态控制LED灯的状态切换。这便是这个实验的大致步骤了。
使能GPIO端口时钟
所有的GPIO外设都挂载在APB2总线上,所以其使能寄存器为RCC_APB2ENR,查阅固件库手册可得其固件函数为RCC_APB2PeriphClockCmd(该固件函数功能即为对RCC_APB2ENR寄存器操作的封装)。我们需要使能的是GPIOA时钟,所以可调用如下API实现使能时钟:
RCC_APB2PeriphClockCmd(