新手STM32第五节——按键控制LED
本节主内容是利用按键来控制LED的状态,这里要学习按键模块,涉及到设置按键驱动、LED驱动。
首先是LED驱动模块:这里是借助Hardware文件夹下创建LED.c与.h文件,其中.c文件主要是写LED初始化函数、驱动函数(包括LED亮、灭与状态取反三类函数)。
1.LED初始化函数:LED所连接到的外设时钟使能语句,外设配置(包括模式、所接引脚、速度),这里由于是选择推挽输出模式,注意这里是输出,而非输入,因为LED无法给寄存器写入数据,而是要靠寄存器输出状态从而驱动外设,这里推挽输出默认上电后是显示低电平,所以初始化里面要给高电平,保证初始化之后不亮。
2.LED驱动函数:LED亮与灭,主要语句就是借助GPIO_SetBits()或者GPIO_RESetBits(),直接控制高低电平即可;而LED状态取反函数,这里主要是借助gpio.h文件里包含的写操作的后两个函数:GPIO_ReadOutputDataBit(),这里是借助输出该引脚的数据取反,具体代码如下。主要是学这个函数的使用。部分代码如下:
其次是按键模块:这里是第一次接触按键,由于按键是外部调整其状态来给寄存器写入数据,所以这里要用到输入模式,这里选择上拉输入模式是由于当按键按下时,低电平有效,默认是高电平,记住这样设置即可,GPIO_Mode_IPU表示上拉输入模式;按键模块.c文件也是初始化操作,内容基本上一样。接着就是获取按键返回的键码数值,从而根据该数值可以判断按键是否按下,按下的话在主函数里该执行什么语句,所以是层层关联,按照逻辑执行。获取键码数值函数一定要有返回值函数,这里选择uint8_t类型,最后return 变量名即可。部分代码如下:
综上,这里主要就是学习模块化编程,建立LED.c与LED.h文件,然后在.c文件中编写初始化函数、驱动函数,而后在.h文件中引用这些函数,在主函数中头文件中写上该.h文件,这样的话就可以在主函数中使用这些.c的所有函数,相当于是建立联系,不用全部都写在主函数中。
其中,按键模块要利用检测按键是否按下、延时(消除按下抖动)、判断按下是否还在进行(循环)、再延时(为了消除松开的抖动)。
