本文主要是介绍STM32高级篇—按键FIFO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
想成问一名非常优秀的嵌入式软件工程师,是需要掌握很多知识的。
完成STM32的基础内容的学习后,我们也进入到学习STM32高级的内容上。
本人也是一名嵌入式的初级入坑人,写的内容可能会有错误,或者不正确的地方也请大家多多指教,我们一起努力。
文章目录
- 一、FIFO(先进先出)
- 1.1 按键FIFO的意义
- 1.2 FIFO的实现
- 二、按键FIFO的实现
- 2.1 按键FIFO的初始化
- 2.2 按键FIFO功能的实现
- 2.3 按键扫描功能实现
一、FIFO(先进先出)
1.1 按键FIFO的意义
通常情况下,我们再判断按键是否按下的时候,是采用中断的方式进行设计的,过多的使用中断,会导致程序实现的不稳定,因此需要设计FIFO按键模式,设计按键FIFO主要有几方面的好处:
1)可以有效地记录按键事件的发生,尤其使对按键的按下,长按,弹起等事件的发生,使用FIFO的方式实现是一种非常好的思路。
2)系统是非阻塞的,这样系统在检测到按键按下的情况下,由于机械按键抖动的原因不需要再这里等待一段事件,然后再确定按键是否按下。
1.2 FIFO的实现
FIFO的基本思想,就是先进先出,还是比较好理解的,我们以几张图为代表,就可以轻松的搞定。我们以5个字节的FIFO空间为例子。Read和Write分别表示读和写指针。
分别按下按键,K1,K2,K3按键被按下的事件将进入FIFO当中。如下所示。这个时候写指针会根据写入的事件从而发生改变。
通过读指针,实现对按键事件的读写操作。
二、按键FIFO的实现
2.1 按键FIFO的初始化
/*
*******************************************************************************************
* 函 数 名: KeyFifoVar_Init
* 功能说明: 初始化每一个按键对应的结构体
* 形 参: 无
* 返 回 值: 无
*******************************************************************************************
*/
static void KeyFifoVar_Init(void)
{uint8_t i;// 初始化读写指针s_tKey.Read = 0;s_tKey.Write = 0; // 给每个按键结构体成员变量赋一组值for(i = 0; i < KEY_NUM; i++){s_tBtn[i].LongTime = KEY_LONG_TIME;s_tBtn[i].Count = KEY_FILTER_TIME;s_tBtn[i].State = 0;s_tBtn[i].RepeatCount = 0;s_tBtn[i].RepeatSpeed = 0;s_tBtn[i].LongTime = 0; }/* 如果需要单独更改某个按键的参数,可以在此单独重新赋值 */
这篇关于STM32高级篇—按键FIFO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!