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

基于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.xdnf.cn/news/18139.html

相关文章:

  • 无痕HOOK 检测及对抗
  • Altium Designer 22使用笔记(7)---网表导入,叠层设置
  • 解密红外温度芯片的“工作环境温度” 范围
  • 在openEuler24.03 LTS上高效部署Apache2服务的完整指南
  • CPP多线程1:C++11的std::thread
  • LakeHouse--湖仓一体架构
  • 防御保护16
  • 【更新公告】C++算法·线段树
  • CSDN部分内容改为视频转到B站-清单
  • 容器化部署:用Docker封装机器翻译模型与服务详解
  • NY243NY253美光固态闪存NY257NY260
  • AI的下一个竞争焦点——世界模型
  • ABAP AMDP 是一项什么技术?
  • Redis--day6--黑马点评--商户查询缓存
  • Git代码库安装与管理常用操作
  • WSL 配置文件 wsl.conf 设置
  • 学习日志35 python
  • 后台管理系统-3-vue3之左侧菜单栏和头部导航栏的静态搭建
  • 如何在 Ubuntu 24.04 Server 或 Desktop 上安装 XFCE
  • 基于隐私保护的旅游信息共享平台(LW+源码+讲解+部署)
  • 安卓四大组件基础题
  • 美国服务器环境下Windows容器工作负载智能弹性伸缩
  • Agent中的memory
  • 17.3 全选购物车
  • MyBatis 的 SQL 拦截器:原理、实现与实践
  • 【力扣-多数元素 JAVA/Python】
  • GaussDB 数据库架构师修炼(十三)安全管理(4)-数据库审计
  • Reading Coach-微软推出的免费AI阅读教练
  • 洛谷B3924 [GESP202312 二级] 小杨的H字矩阵
  • Wi-Fi 7 将如何重塑互联工作场所