【STM32】定时器输入捕获

STM32 定时器输入捕获功能笔记

一、什么是输入捕获(Input Capture)

输入捕获是利用定时器的输入通道,在检测到信号电平变化(如上升沿或下降沿)时,立即将当前计数器的值捕获并保存到捕获寄存器(CCR)中。这一过程由硬件完成,不会受程序运行延迟影响,可用于精确测量信号的时间特性。

典型应用场景:测量脉冲宽度、频率、信号周期等。


二、输入捕获的基本原理

  • STM32 的通用定时器和高级定时器都支持输入捕获功能。

  • 每个输入通道(TIx)都对应一个捕获寄存器 CCRx。

  • 捕获过程:
    TIx → 滤波器 → 边沿检测 → 捕获事件 → CCRx记录当前CNT值

当配置为上升沿捕获时:
→ 信号从低跳高时,CCRx 记录当前定时器 CNT 的值。
当配置为下降沿捕获时:
→ 信号从高跳低时,CCRx 同样记录 CNT 值。

📌 一个通道只能设置为上升沿或下降沿捕获,不能同时捕获两个。


三、直接模式与间接模式(重点)

输入捕获支持 直接模式间接模式,用于灵活地测量信号宽度或周期。

模式捕获通道检测通道用途举例
直接模式CCR1 记录 TI1FP1 的边沿用于周期或频率测量
间接模式CCR1 记录 TI2FP1 的边沿用于测量高/低电平宽度(PWM输入)

⚠️ TI1/TI2 是一对可互相借用输入的通道,TI3/TI4 亦同理。
例如 CCR1 可以捕获 TI2(间接模式)输入的边沿,而不是 TI1。

示例说明:
  • PWM输入测量

    • CCR1 配置为捕获上升沿(周期起点)

    • CCR2 配置为捕获下降沿(占空比终点)

    • 得到的两次捕获值之差即可算出高电平持续时间或周期


四、通道映射说明

TI1  --> TI1FP1 → 捕获寄存器1(CCR1)
TI2  --> TI2FP2 → 捕获寄存器2(CCR2)
TI1  --> TI1FP2 → 捕获寄存器2(间接模式)
TI2  --> TI2FP1 → 捕获寄存器1(间接模式)TI3、TI4同理,支持直接与间接映射

五、CubeMX 设置步骤(以 TIM2 CH1 CH2 为例)

1.选择定时器 TIM2

2.选择 Channel 1 → Input Capture Direct Mode(上升沿)

3.选择 Channel 2 → Input Capture Indirect Mode(下降沿)

4.设置输入极性(上升沿/下降沿)

5.设置采样频率与滤波器(一般默认即可)

6.勾选 TIM2 global interrupt

7.生成代码并编辑中断回调函数


六、HAL库相关函数与代码示例

1. 启动捕获:

HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // 启动通道1输入捕获(中断方式)
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); // 启动通道2输入捕获

2. 中断回调处理:

uint32_t capture1 = 0, capture2 = 0, pulse_width = 0;void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){capture1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // 上升沿时间}else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){capture2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // 下降沿时间if(capture2 > capture1)pulse_width = capture2 - capture1;elsepulse_width = (0xFFFF - capture1 + capture2); // 溢出处理}
}
1;elsepulse_width = (0xFFFF - capture1 + capture2); // 溢出处理}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/195.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【安装指南】Chat2DB-集成了AI功能的数据库管理工具

一、Chat2DB 的介绍 Chat2DB 是一款开源的、AI 驱动的数据库工具和 SQL 客户端,提供现代化的图形界面,支持 MySQL、Oracle、PostgreSQL、DB2、SQL Server、SQLite、H2、ClickHouse、BigQuery 等多种数据库。它旨在简化数据库管理、SQL 查询编写、报表生…

NVIDIA Performance Primitives (NPP) 库全面解析

NVIDIA Performance Primitives (NPP) 是 NVIDIA 提供的 GPU 加速图像和信号处理函数库,专为 CUDA 架构优化设计。NPP库通过提供高度优化的图像和信号处理原语,可以显著加速各类视觉计算任务,是CUDA开发者处理多媒体数据的利器。 一、NPP 库概述 核心特性 高性能:针对 NV…

基于C++、JsonCpp、Muduo库实现的分布式RPC通信框架

⭐️个人主页:小羊 ⭐️所属专栏:RPC框架 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 项目介绍JsonCpp库简单介绍Muduo库简单介绍C11异步操作——std::future1. 使用 std::async 关联异步任务2. std::packaged_task…

【多云PaaS】跨云平台的无缝迁移方案

多云PaaS:跨云平台的无缝迁移方案 一、技术背景及发展二、技术特点与核心能力1. 容器化与云原生深度融合2. 智能运维体系3. 统一服务目录 三、关键技术实现细节难题1:异构资源抽象难题2:数据一致性保障难题3:网络互通优化 四、未来…

curl详解

curl 是一个常用的命令行工具,用于发送 HTTP 请求,支持包括 GET、POST、PUT、DELETE 等在内的多种 HTTP 方法。它非常适合用来测试 API、下载文件、与后端服务进行交互等。接下来,我会详细讲解 curl 的基本用法以及常见的应用场景。 &#x…

Node.js心得笔记

npm init 可用npm 来调试node项目 浏览器中的顶级对象时window <ref *1> Object [global] { global: [Circular *1], clearImmediate: [Function: clearImmediate], setImmediate: [Function: setImmediate] { [Symbol(nodejs.util.promisify.custom)]: [Getter] }, cl…

深挖Java基础之:变量与类型

今天我要介绍的是在Java中对变量和类型的一些相关知识点的介绍&#xff0c;包括对基本数据类型&#xff0c;引用类型&#xff0c;变量命名规则和类型转换以及其注意事项的解明。 java变量与类型&#xff1a;Java 是静态类型语言&#xff0c;变量必须先声明类型后使用。变量是存…

PostgreSQL数据库操作SQL

数据库操作SQL 创建 创建数据库 create database db_test;创建并指定相关参数 with owner : 所有者encoding : 编码connection limit &#xff1a;连接限制 create database db_test1 with owner postgresencoding utf-8connection limit 100;修改 修改数据库名称 renam…

Java 泛型参数问题:‘ResponseData.this‘ cannot be referenced from a static contex

问题与处理策略 问题描述 Data AllArgsConstructor NoArgsConstructor public class ResponseData<T> {private Integer code;private String msg;private T data;public static final int CODE_SUCCESS 2001;public static final int CODE_FAIL 3001;public static …

从工厂到生活:算法 × 深度学习,正在改写自动化的底层逻辑

一.背景&#xff1a; 从工业革命时期的机械自动化&#xff0c;到信息时代的智能自动化&#xff0c;人类对自动化技术的追求从未停歇。近年来&#xff0c;随着物联网、大数据、云计算等技术的蓬勃发展&#xff0c;自动化系统的复杂度与智能化程度显著提升。算法与深度学习的深度…

spring 从application.properties中获取参数的四种方式

在Spring Boot中&#xff0c;自定义一个Starter时&#xff0c;从application.properties中获取参数主要有以下几种方法&#xff1a; 使用Value注解 这是最常用的方法之一&#xff0c;通过Value注解可以直接将application.properties中的属性值注入到Spring管理的Bean中。 imp…

2025华东杯B题华东杯数学建模思路代码成品讲解工序安排问题

完整内容请看文章最下面的推广群 我将展示完整的文章、代码和结果 工序安排问题 摘要 本文研究的核心是制造业中的工序安排优化问题&#xff0c;源自实际生产管理中常见的资源分配挑战。问题背景设定为一家拥有100名工人和三条相同服装生产线的成衣制造厂&#xff0c;涉及裁…