【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.mzph.cn/pingmian/79159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt通过QXlsx库文件写入到excl文件,读取excl文件

第一:下载QXlsx库文件 https://download.csdn.net/download/qq_32663053/90739425 第二:在Qt项目中引入QXlsx库,需要把QXlsx库文件放在项目文件夹下 第三:将tableview中的数据存入到excl文件 代码: void MainWindow…

【KWDB 创作者计划】一款面向 AIoT 的多模数据库实战体验

一、KWDB:AIoT 时代的数据库新选择 KWDB 是由开放原子开源基金会孵化的分布式多模数据库,专为物联网、工业互联网等场景设计。其核心价值在于时序与关系数据融合处理能力: ​多模统一引擎​:单个实例可同时建立时序库&#xff08…

【教学类-102-22】蝴蝶彩色1——通义万相“彩色蝴蝶”透明切边基础图片制作(五款板式、批量下载、修图、透明、切边)

一、下载图片 关键词:卡通简笔画,白色背景,黑白轮廓线,、鲜艳,彩色,一只蝴蝶,简单,可爱,矢量图,大。 简笔画 强度1 4:3(长方形适配A4纸) 五…

【JAVA】方法定义与重载:JVM方法调用机制(8)

核心知识点详细解释 Java方法的定义和使用 在Java中,方法是一段具有特定功能的代码块,它可以接受参数并返回一个值。方法的定义包括方法的修饰符、返回类型、方法名、参数列表和方法体。其基本语法如下: 修饰符 返回类型 方法名(参数列表)…

基于STM32的带恒温系统智能外卖柜设计

标题:基于STM32的带恒温系统智能外卖柜设计 内容:1.摘要 随着外卖行业的迅速发展,对外卖存放设备的智能化和功能性要求日益提高。本设计的目的是开发一种基于STM32的带恒温系统智能外卖柜。方法上,以STM32微控制器为核心,结合温度传感器、加…

【综述】相位解包裹算法对比分析

引言 相位解包裹是基于干涉的位相测量技术中的重要环节,如合成孔径雷达干涉、光学干涉测量技术、医学成像技术、数字全息三维成像、相干衍射成像等技术中都涉及位相解包裹。位相解包裹也称为位相展开、位相解截断、位相解缠绕等。与之相反的过程谓之包裹位相、截断…

Rust 学习笔记:关于枚举与模式匹配的练习题

Rust 学习笔记:关于枚举与模式匹配的练习题 Rust 学习笔记:关于枚举与模式匹配的练习题以下程序能否通过编译?若能,输出是什么?考虑这两种表示结果类型的方式,若计算成功,则包含值 T&#xff1b…

C++负载均衡远程调用学习之QPS性能测试

目录 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 3.QPS_TEST_SERVER端实现 4.QPS_TEST_QPS简单介绍 5.QPS_TEST_QPS客户端工具编写和性能测试 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 ## 14) Reactor框架QPS性能测试 ​ 接下来我们写一个测试用例来测一下我们…

【MySQL数据库】视图

1,视图的基本介绍 视图是一个虚拟表,其内容由查询定义。与真实表一样的是,视图包含带有名称的列和行数据;与真实表不一样的是,视图本身并不在数据库中存储数据。视图的数据变化会影响到基表,基表的数据变化…

Linux系统安装方式+适合初学者的发行版本

Linux系统安装方式适合初学者发行版—目录 一、Linux系统的安装方式1. 物理机直接安装2. 虚拟机安装3. 双系统安装4. Live USB试用5. 云服务器安装 二、适合初学者的Linux发行版1. Ubuntu2. Linux Mint3. Zorin OS4. Pop!_OS5. Elementary OS6. Fedora7. Manjaro 三、选择建议场…

Linux C++ JNI封装、打包成jar包供Java调用详细介绍

在前面 Android专栏 中详细介绍了如何在Android Studio中调用通过jni封装的c库。 在Android使用 opencv c代码,需要准备opencv4android,也就是c的任何代码,是使用Android NDK编译的,相当于在windows/mac上使用Android stdido交叉…

4.1 模块概述

1.Python结构 工程 > 包 > 模块 Python工程: “Python项目中最大的文件夹(本质就是一个文件夹)” --- 左侧的 CODE文件夹 为Python工程 Python包: 本质就是一个文件夹,但是python包中具备具体的标识,如果没有标识则不能导入 --- 左侧的 01.Python基础 文件夹为python包 P…

AJAX 实例

AJAX 实例 引言 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。Ajax通过在后台与服务器交换数据,实现了页面的动态更新,从而提高了用户体验和…

相机的基础架构

📷 相机相关基础架构学习路径 一、了解手机相机系统架构 Android Camera HAL(如果你是做 Android 平台) 学习 Camera HAL3 架构(基于 camera_device_t, camera3_device_ops 接口) 熟悉 CameraService → CameraProvid…

MLX Chat - 基于 Streamlit 的 MLX 前端界面

本文翻译整理自:https://github.com/da-z/mlx-ui 一、关于 MLX Chat 一个基于 Streamlit 的简单 UI/网页前端,用于 MLX mlx-lm 项目。 相关链接资源 github : https://github.com/da-z/mlx-uiMLX 社区模型库:https://huggingface.co/mlx-co…

el-table 自定义列、自定义数据

一、对象数组格式自定义拆分为N列 1-1、数据格式: const arrayList ref([{"RACK_NO": "A-1-001"},{"RACK_NO": "A-1-002"},{ "RACK_NO": "A-1-003"},//省略多个{"RACK_NO": "A-1-100…

JVM 如何使用性能分析工具定位代码中的性能问题?

核心思想: 通过工具观察程序在特定负载下的运行状态,识别消耗资源最多的代码段(热点代码)、异常的内存分配模式或线程阻塞情况,然后针对性的优化代码。 通用步骤: 确定问题: 首先明确遇到了什…

Python虚假新闻检测识别

程序示例精选 Python虚假新闻检测识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《Python虚假新闻检测识别》编写代码,代码整洁,规则,易读。 学习与应…

网络原理 - 12(HTTP/HTTPS - 3 - 响应)

目录 认识“状态码”(status code) 200 OK 404 Not Found 403 Forbidden 405 Method Not Allowed 500 Internal Server Error 504 Gateway Timeout 302 Move temporarily 301 Moved Permanently 418 I am a teaport 状态码小结: …

Spring Boot中集成Guava Cache或者Caffeine

一、在Spring Boot(1.x版本)中集成Guava Cache 注意&#xff1a; Spring Boot 2.x用户&#xff1a;优先使用Caffeine&#xff0c;性能更优且维护活跃。 1. 添加依赖 在pom.xml中添加Guava依赖&#xff1a; <dependency><groupId>com.google.guava</groupId&…