当前位置: 首页 > news >正文

基于STM32的精确按键时长测量系统

引言:为什么需要精确测量按键时间?

在嵌入式系统中,按键是最常见的人机交互方式之一。无论是简单的短按/长按识别,还是需要精确到微秒级的按键时长测量(如游戏手柄、工业控制器),都需要可靠的输入捕获技术。本文将深入探讨如何使用STM32的定时器输入捕获功能实现高精度按键时间测量系统。

一、系统架构与核心原理

1. 硬件连接


2. 工作原理

  • ​下降沿检测​​:按键按下瞬间(电平从高到低)

  • ​上升沿检测​​:按键释放瞬间(电平从低到高)

  • ​时间计算​​:总时间 = 溢出次数 × (ARR+1) + 最后计数值

  • 使用定时器 2 通道 2 来捕获按键 2 按下时间,并通过串口打印。

  • 计一个数的时间:1us,PSC=71,ARR=65535

3. 状态机设计

二、关键代码解析

1. 状态管理结构体

struct {uint8_t succeed_flag;   // 完成捕获标志uint8_t rising_flag;    // 上升沿标志uint8_t falling_flag;   // 下降沿标志uint16_t timout_cnt;    // 溢出计数器
} capture_status = {0};

2. 定时器初始化

void IC_Init(uint16_t arr, uint16_t psc)
{// 定时器基本配置ic_handle.Instance = TIM2;ic_handle.Init.Prescaler = psc;    // 预分频ic_handle.Init.Period = arr;       // 自动重装载值ic_handle.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数HAL_TIM_IC_Init(&ic_handle);// 输入捕获通道配置TIM_IC_InitTypeDef ic_config = {0};ic_config.ICFilter = 0;             // 无滤波ic_config.ICPolarity = TIM_ICPOLARITY_FALLING; // 初始捕获下降沿ic_config.ICPrescaler = TIM_ICPSC_DIV1; // 不分频ic_config.ICSelection = TIM_ICSELECTION_DIRECTTI; // 直接输入HAL_TIM_IC_ConfigChannel(&ic_handle, &ic_config, TIM_CHANN
http://www.dtcms.com/a/334263.html

相关文章:

  • 一周学会Matplotlib3 Python 数据可视化-绘制自相关图
  • 2020/12 JLPT听力原文 问题二 2番
  • Pycaita二次开发基础代码解析:交互选择、参数化建模与球体创建的工业级实现
  • 415. 字符串相加
  • dify 调用本地的 stable diffusion api生成图片的工作流搭建
  • 分布式存储与存储阵列:从传统到现代的存储革命
  • Windows Manager:全方位优化你的Windows系统
  • PCB高频板与普通电路板的核心差异
  • JavaScript 闭包与递归深度解析:从理论到实战
  • [优选算法专题二滑动窗口——最大连续1的个数 III]
  • 【轨物方案】预防性运维:轨物科技用AI+机器人重塑光伏电站价值链
  • K8S的ingress
  • 石头科技披露半年报:营收79.03亿元,同比大增78.96%
  • vscode中用python调用matlab的函数(环境安装)
  • pdf合并代码
  • Autosar Os新手入门
  • IOMMU多级页表查找的验证
  • 从0到1掌握 Spring Security(第三篇):三种认证方式,按配置一键切换
  • Flink Stream API 源码走读 - print()
  • TDengine IDMP 高级功能(3. 概念解释)
  • 用Pygame开发桌面小游戏:从入门到发布
  • MixOne:Electron Remote模块的现代化继任者
  • AI 云电竞游戏盒子:从“盒子”到“云-端-芯”一体化竞技平台的架构实践
  • 【BFS 重构树】P11907 [NHSPC 2023] F. 恐怖的黑色魔物|省选-
  • AI的下一个竞争焦点——世界模型
  • 笔试——Day40
  • 超酷炫的Three.js示例
  • Proteus 入门教程
  • 深度剖析setjmp/longjmp:非局部跳转的内部机制与协程应用限制
  • 双重调度(Double Dispatch):《More Effective C++》条款31