STM32按键检测例程:软件滤波与FIFO应用
"Ex004-按键检测例程(软件滤波+FIFO),这是一个用于微控制器的示例程序,旨在实现按键检测功能,并通过软件滤波和FIFO(先进先出)技术处理按键输入,以提高系统稳定性。该程序适用于ST微控制器的特定版本,并且在开发环境中使用了如KEIL uVision或IAR EWARM等编译器。程序还包括了错误处理、LED状态显示以及与PC机的串行通信功能,以便于调试和信息传输。" 此程序的核心在于按键检测部分,它采用了软件滤波技术来消除按键抖动,确保稳定可靠的按键识别。软件滤波通常包括延迟比较、平均值计算或者滑动窗口等方法,目的是过滤掉由于机械接触产生的瞬间噪声,防止误触发。FIFO的应用则允许缓存按键事件,避免因快速连续按下按键而丢失信息,同时使得处理这些按键事件更加有序。 程序的实现可能包括以下几个关键部分: 1. 按键扫描:周期性地读取按键状态,并将读取的结果存入FIFO。 2. 软件滤波:对FIFO中的数据进行处理,如检查连续的按键状态变化,确保真正意义上的按键按下或释放。 3. FIFO管理:确保FIFO不会溢出,当达到预设容量时,新进的数据会替换旧的数据。 4. 错误处理:对异常情况进行处理,如按键长时间被按下可能会触发错误提示。 5. LED反馈:通过LED状态的变化来指示程序运行情况,例如LED1周期性闪烁表示系统正常运行,长亮表示按键被按下。 6. 串行通信:通过串口(如COM1)与PC进行通信,将按键事件或其他重要信息实时发送到PC端,方便进行调试和日志记录。 为了在Keil MDK环境下成功编译此程序,可能需要禁用特定的诊断警告,比如diag_suppress=870,以适应CPU和内存配置。 总结来说,这个程序提供了一个实用的微控制器按键检测解决方案,通过软件滤波和FIFO提高了系统鲁棒性,同时还具备了与上位机通信的能力,是嵌入式开发中处理按键输入的一个典型示例。
*********************************************************************************************************
*
* 例程名称 : Ex004-按键检测例程(软件滤波+FIFO)
* 例程版本 : V2.0
* ST固件库版本 :V3.5.0
* 作 者 : armfly
* 发布日期 : 2011-10-16
*
* 开发环境 : KEIL的uVision V3.70、uVision V4.13、IAR的EWARM V5.30
*
* 修改记录 :
* 2010-09-27 发布V1.0版本,固件库为V3.1.2
* 2011-03-20 发布V1.1版本,固件库为V3.4.0
* 2011-11-16 发布2.0版本,固件库为V3.5.0,优化工程结构,打印信息改为中文
*
*********************************************************************************************************
*/
【1】例程介绍
这是一个实用的例程。您可以以这个例程为模版,开始您自己的应用程序设计。
这个例子在systick中断服务程序中处理按键的检测和软件滤波,采用先进先出FIFO缓冲区保存键值。
应用程序(主程序)无需实现按键的按下、弹起、长按等事件的检测, 您可以腾出精力关注具体的应用程序流程。
请用串口线将开发板的COM1口连接到PC机的串口(或者USB串口),然后打开超级终端软件(XP自带的或者SecureCRT
软件),可以在PC软件界面看到例程的运行信息。
程序具有如下功能:
- 复位后打印例程基本信息
- LED1指示灯按500ms的周期闪烁10次(持续5秒)
- 5秒钟后,您也可以继续按键,按键的各种事件(按下、弹起)信息会同步打印到串口1
- 摇杆的上下左右键支持连发,按住不放会不停的发送按键消息
程序执行结果如下:
*************************************************************
* 例程名称 : 按键检测例程(软件滤波+FIFO)
* 例程版本 : 2.0
* 发布日期 : 2011-10-16
* 固件库版本 : 3.5.0
*
* QQ : 1295744630
* Email : armfly@qq.com
* Copyright www.armfly.com 安富莱电子
*************************************************************
LED1正在闪烁5次,您可以按开发板上的任意按键,后台程序会自动保存键值
TAMPER键按下
TAMPER键弹起
WAKEUP键按下
WAKEUP键弹起
USER键按下
USER键弹起
摇杆上键按下
摇杆右键按下
摇杆左键按下
摇杆下键按下
对于Keil MDK,为了避免中文字符串告警,需要在C/C++编译选项中增加 --diag_suppress=870 参数。
本程序支持在CPU内部Flash、CPU内部RAM和CPU外部RAM调试。在CPU内部RAM和CPU外部SRAM调试时,无需切换开发板上的
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦