STM32 按键高级处理|消抖、长按、短按、连按,状态机非阻塞按键框架深度解析
前言嵌入式项目里,按键看着简单,实则坑非常多。很多新手写按键程序,习惯用HAL_Delay()做软件消抖,写个while循环等待按键释放。这种写法在简单 Demo 没问题,但放到真实项目里,延时会阻塞整个主循环,会导致串口丢数据、传感器采样卡顿、屏幕刷新停滞。想要同时识别短按、长按、连续按键,还要不阻塞程序运行,最佳方案就是状态机 + 时间戳非阻塞按键框架。一、按键抖动底层原理机械按键内部是金属弹片,按下 / 松开瞬间,触点会快速通断,产生 10~20ms 的电平抖动,MCU GPIO 会采集到一连串高低电平跳变。如果不做消抖,一次按键动作会被识别成多次触发。两种消抖方案对比:延时消抖:读到电平变化,直接 delay 20ms 再采样。✅简单;❌阻塞 CPU,项目复杂后容易出时序问题,不推荐量产。时间戳消抖(非阻塞):记录电平跳变时刻,只有电平稳定保持超过消抖阈值,才判定按键状态更新。✅不阻塞,适合多任务系统,工业项目首选。核心思想:不原地等待,主循环里不断检查按键引脚电平,用系统滴答定时器(SysTick)的时间戳记录时间差。二、按键状态机模型设计我们把按键完整动作拆成 5 个状态,状态只在主循环中流转,没有任何阻塞等待:KEY_IDLE(空闲)↓检测到按键按下,记录按下时间戳KEY_DEBOUNCE(消抖等待)↓电平稳定超过消抖时间 → KEY_PRESS(按键保持)↓计时达到长按阈值 → KEY_LONGPRESS(长按触发)↓按键松开KEY_RELEASE(按键释放)基于这套状态机,轻松识别:

相关新闻

《统计学习方法》啃读指南:模型、策略与算法的核心推导思路

《统计学习方法》啃读指南:模型、策略与算法的核心推导思路

《统计学习方法》这本书,应该是国内做机器学习相关工作的朋友绕不开的一本经典。第一版我前后翻了三遍,每次重读都有新的收获。现在市面上讲机器学习的书不少,但能把“理论”和“推导”讲得这么清楚的中文书,这本绝对排得上号。这…

2026/10/14 15:27:21 阅读更多 →
武器知识图谱构建全流程:从Scrapy爬虫到问答系统落地

武器知识图谱构建全流程:从Scrapy爬虫到问答系统落地

简介:面向爬虫与知识图谱学习者的武器装备智能问答项目,以QAonMilitaryKG-master为工程案例,围绕Scrapy采集、kg-scrapy扩展、MongoDB存储与问答系统四个环节,完整演示从军事装备数据抓取到知识服务输出的闭环流程,适合…

2026/10/14 15:27:21 阅读更多 →
混合检索实战避坑:避免 BM25 停用词与极端高频词打乱稠密语义向量排序

混合检索实战避坑:避免 BM25 停用词与极端高频词打乱稠密语义向量排序

在企业级 RAG(检索增强生成)与垂直智能搜索系统中,混合检索(Hybrid Search)已经成为事实上的标准基线:利用 BM25 倒排索引捕捉精准术语、货号、错误码等强字面匹配,利用稠密向量(Den…

2026/10/14 15:27:21 阅读更多 →

最新新闻

BLE蓝牙模块功耗优化:从硬件到制造的全链路实践

BLE蓝牙模块功耗优化:从硬件到制造的全链路实践

1. 某次续航翻车之后,我把功耗账重新算了一遍三年前我刚接手一款蓝牙模块的功耗优化时,一直有个错觉:只要选了一颗标称待机电流只有1微安的BLE SoC,产品续航就不会差。结果样机在老化架上跑了不到两个月,电池电压就开始…

2026/10/14 16:19:30 阅读更多 →
低功耗射频收发芯片:物联网设备续航与可靠性的关键

低功耗射频收发芯片:物联网设备续航与可靠性的关键

1. 项目整体解读:低功耗收发集成电路到底在解决什么问题低功耗TX-RX集成电路,简单说就是发射和接收一体的射频芯片,但核心诉求是"省电"。我们每天用的手机、手表、传感器、遥控器,里面都有这类芯片,只不过有…

2026/10/14 16:19:30 阅读更多 →
SpringBoot集成AI服务与MCP动态管理实践

SpringBoot集成AI服务与MCP动态管理实践

1. 项目背景与核心价值在当下企业级应用开发中,SpringBoot已经成为Java生态中构建微服务的首选框架。而随着AI能力的普及,如何在SpringBoot应用中高效集成AI服务成为开发者面临的新课题。最近我在一个金融风控项目中,需要实现SpringBoot应用与…

2026/10/14 16:19:30 阅读更多 →
树莓派C++部署YOLOv5-Lite:Qt+OpenCV+NCNN实战

树莓派C++部署YOLOv5-Lite:Qt+OpenCV+NCNN实战

简介:这份资源面向嵌入式开发与计算机视觉方向的开发者,提供在树莓派上基于Qt、OpenCV与C部署YOLOv5-Lite深度学习推理的完整工程实践。内容围绕边缘计算场景展开,涵盖Qt图形界面搭建、OpenCV图像预处理、C模型加载与结果解析,以及…

2026/10/14 16:19:30 阅读更多 →
WhoDB Agent Hooks 全解析:为 AI 编码助手构建自动格式化、代码生成与构建验证钩子体系

WhoDB Agent Hooks 全解析:为 AI 编码助手构建自动格式化、代码生成与构建验证钩子体系

数据库客户端后端前端CLI桌面应用数据可视化AI 应用 【免费下载链接】whodb Where data access meets operational intelligence 项目地址: https://gitcode.com/gh_mirrors/wh/whodb 点击查看 免费下载 本文深入剖析 WhoDB 开源仓库中的 .agents/hooks 钩子基础设…

2026/10/14 16:19:30 阅读更多 →
中小企业Wi-Fi安全自检工具:PMKID嗅探与多网卡审计实战

中小企业Wi-Fi安全自检工具:PMKID嗅探与多网卡审计实战

1. 这不是黑客工具,而是中小企业的网络健康自检仪“免费开源,中小企业老板必备神器,跨平台 Wi-Fi 审计工具,多网卡监听、WPA/WPA2握手包捕获、PMKID嗅探、密码找回”——这个标题里每一个词都不是噱头,而是真实可落地的…

2026/10/14 16:18:30 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →