通用定时器---输入捕获功能

目录

一、概念

二、输入捕获的结构图

三、配置的基本步骤


一、概念

        STM32的输入捕获功能是一种强大的特性,他允许处理器捕获外部输入信号,并基于定时器抓取输入信号指定触发方式(上升沿/下降沿)之间的长度。这对于测量信号的脉宽,频率和周期非常有用。

        输入捕获通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变时,将当前定时器的值(TIMx_CNT)存放到对应的输入捕获寄存器(CCR)中,完成一次捕获。  可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模式,同时测量频率和占空比 可配合主从触发模式,实现硬件全自动测量。

        其中,输入捕获支持以下三种捕获方式:

  1. 上升沿触发:当信号从低电平跳变到高电平时触发。
  2. 下降沿触发:当信号从高电平跳变到低电平时触发。
  3. 上下都触发:同时捕获上升沿和下降沿,以便测量信号的完整周期。

        对于测量频率,我们一般有两种方法:

        1.直接测频率法:先开启定时器,记录信号来临的次数,一个周期/多个周期后,这个次数直接就是频率值。

        2.测量周期间接测量频率法:先开启定时器,在信号来临时记录一次当前定时器的值T1,然后在第二次信号来临的时候记录定时器的值T2,则时间差为T2-T1,即周期,取到数则得到了频率。

        这两种方法各有优点:直接法适合测量频率较高的信号;间接法适合测量频率较低的信号。这个较高和较低一般通过中界频率来衡量,如果大于中界频率则使用直接法,小于则使用间接法。

二、输入捕获的结构图

        这里的主从触发模式选择:可以让GPIOA在有信号输入的时候,在TI1FP1时,兵分两路,一路往下让CCR寄存机锁存CNT计数器的值;另一路让TIM2计数器自动清零CNT计数器。这样我们从第二次开始,读取 到CCR寄存器中的值就直接是计数值了。

三、配置的基本步骤

1.开启时钟

首先,需要使能TIM2(作为计数器)和相应GPIO引脚(作为信号输入口)的时钟。

2.配置引脚

将GPIO引脚配置为复用功能,并设置为输入模式。

3.配置基本定时器

初始化TIM2的基本参数,如预分频器、计数器模式和自动重装载值。

4.配置输入捕获

设置输入捕获的通道映射、预分频、滤波和触发极性。

5.使能捕获通道和定时器

最后,使能捕获通道和定时器开始工作。

6.配置中断和编写中断服务程序(每过一段时间看一下CCR寄存器的值)

配置NVIC中断优先级,并编写中断服务程序来处理捕获事件。

//打开时钟
void Open_Timer()
{   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 假设使用GPIOA的某个引脚作为输入
}//配置GPIOA_0的引脚为输入模式
void Init_GPIOA()
{GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; // X为具体的引脚号GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 或者设置为上拉/下拉输入,根据需要GPIO_Init(GPIOA, &GPIO_InitStruct);
}//配置TIM2定时器的计数功能
void Init_TIM2_Count()
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 65536 - 1; // 设置自动重装载值---计数周期TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; // 设置预分频器,根据需要调整TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
}//配置输入捕获
void Init_TIM2_Capture()
{TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; // 使用TIM2的通道1TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; // 输入信号的上升沿触发TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; // //输入信号交叉,选择直通,不交叉TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 输入信号不分频,每一个信号都触发捕获TIM_ICInitStructure.TIM_ICFilter = 0x0F; // 输入信号滤波TIM_ICInit(TIM2, &TIM_ICInitStructure);
}//选择触发源及模式
void Init_Mode()
{TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);					//触发源选择TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);					//从模式选择复位																	//即TI1产生上升沿时,会触发CNT归零
}void Init_NVIC()
{NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}void Init_IC()
{Open_Timer();Init_GPIOA();Init_TIM2_Count();Init_TIM2_Capture();Init_Mode();Init_NVIC();
}//中断服务函数
void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET){// 读取捕获值uint32_t capture_value = TIM_GetCapture1(TIM2);// 清除中断标志TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);// 在这里处理捕获值,例如计算信号的周期或频率}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Comsol 大功率超声波清洗机

大功率超声波清洗机是利用超声波在清洗液中产生的空化作用来清洗物体表面的设备。这种清洗机通常用于清洗工业零部件、实验器皿、医疗器械等物体,能够高效去除表面附着的污垢、油脂、细菌等。 大功率超声波清洗机的工作原理是通过超声波换能器将电能转换成机械振动…

计算机视觉中的双边滤波:经典案例与Python代码解析

🌟 计算机视觉中的双边滤波:经典案例与Python代码解析 🚀 Hey小伙伴们!今天我们要聊的是计算机视觉中的一个重要技术——双边滤波。双边滤波是一种非线性滤波方法,主要用于图像去噪和平滑,同时保留图像的边…

模板——实现泛型编程的有力武器

模板——实现泛型编程的有力武器 我们为什么需要模板?模板 前言:关于模板,相信大家都有所而闻,以下是我对C模板的个人看法,希望能够帮助到你们呀! 我们为什么需要模板? 请到大家看这一段代码&a…

Hugging_Face下载

能进huggingface的就能翻过去 不行的话可以去参考这个:mojie.app 1.直接原网下载 2.git(小白勿入) 如果是Linux,可以搜一个叫HFD(HuggingFace_Download) Windows的git安装参考如下:Git安装 建议先看看这个文档, 如果…

C++之内存管理

​ 🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C入门 目录 前言 一、C/C内存分配 二、 malloc、calloc、realloc、free 三、C内存管理方式 3.1 new/delete 操作内置类型 3.2 new和detele操作自定义类型…

QT适配最新版Android SDK

从AndroidStudio的SDK管理下载最新版SDK 从https://www.androiddevtools.cn/下载国内安卓SKDTools 这里下载SKDTools后不需要使用SDK Manager.exe下载SDK(SDK Manager.exe下载的SDK都是旧版,没法支持新版本),直接使用从AndroidS…

Ubuntu 环境下通过 Apt-get 安装软件

操作场景 为提升用户在云服务器上的软件安装效率,减少下载和安装软件的成本,腾讯云提供了 Apt-get 下载源。在 Ubuntu 环境下,用户可通过 Apt-get 快速安装软件。对于 Apt-get 下载源,不需要添加软件源,可以直接安装软…

反转链表、链表内指定区间反转

反转链表 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 如当输入链表{1,2,3}时,经反转后,原链表变…

SpringCloud篇(服务网关 - GateWay)

目录 一、简介 二、为什么需要网关 二、gateway快速入门 1. 创建gateway服务,引入依赖 2. 编写启动类 3. 编写基础配置和路由规则 4. 重启测试 5. 网关路由的流程图 6. 总结 三、断言工厂 四、过滤器工厂 1. 路由过滤器的种类 2. 请求头过滤器 3. 默认…

MATLAB实现历史模拟法计算VaR(Value at Risk)

MATLAB实现历史模拟法计算VaR(Value at Risk) 历史模拟法(Historical Simulation Method)是一种用于计算风险值(Value at Risk, VaR)的非参数方法。它基于过去的资产价格或收益数据来估计未来的潜在损失。 MATLAB代码如下: 完整…

数据结构——红黑树

目录 一.红黑树 二.红黑树的实现 1.红黑树节点的定义 2.红黑树的插入 3.红黑树的遍历 4.检测红黑树 5.红黑树的查找 6.红黑树的性能 三.整体代码 1.RBTree.h 2.RBTree.cpp 一.红黑树 1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上…

OMV7 树莓派 tf卡安装

​ 升级7之后,问题多多,不是docker不行了,就是代理不好使 今天又重装了一遍,用官方的链接,重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置&#xff0…

Java集合ConcurrentHashMap——针对实习面试

目录 Java集合ConcurrentHashMapConcurrentHashMap的特性是什么?HashMap和ConcurrentHashMap的区别?说说ConcurrentHashMap的底层实现 Java集合ConcurrentHashMap ConcurrentHashMap的特性是什么? 线程安全性 多线程并发读写安全&#xff1a…

攻防世界-mfw

进入题目以后可以点击三个网页&#xff0c;这三个网页其中有一个提示我们git、php、Bootstrap。可以联想到是git泄露 在url后面的参数改为.git 存在git漏洞&#xff0c;这时候就可以利用python的githacker库下载泄漏的文件 查看index.php的源代码 <?phpif (isset($_GET[pa…

MySQL面试之底层架构与库表设计

华子目录 mysql的底层架构客户端连接服务端连接的本质&#xff0c;连接用完会立马丢弃吗解析器和优化器的作用sql执行前会发生什么客户端的连接池和服务端的连接池数据库的三范式 mysql的底层架构 客户端连接服务端 连接的本质&#xff0c;连接用完会立马丢弃吗 解析器和优化器…

代理(下):结构化工具对话、Self-Ask with Search以及Plan and execute代理

在上一讲中&#xff0c;我们深入LangChain程序内部机制&#xff0c;探索了AgentExecutor究竟是如何思考&#xff08;Thought&#xff09;、执行&#xff08;Execute/Act&#xff09;和观察&#xff08;Observe&#xff09;的&#xff0c;这些步骤之间的紧密联系就是代理在推理&…

RPC-路由策略

为什么选择路由策略&#xff1f; 每次上线应用的时候都不止一台服务器会运行实例&#xff0c;那上线就涉及到变更&#xff0c;只要变更就可能导致原本正常运行的程序出现异常&#xff0c;尤其是发生重大变动的时候&#xff0c;导致应用不稳定的因素就变得很多。 灰度发布应用…

ctf日常

8&#xff0c; [NISACTF 2022]easyssrf 跨目录读取 NSSCTF{c42d6e04-f7cb-4ac4-925b-efd9b90c76ff} 9&#xff0c; [SWPUCTF 2021 新生赛]hardrce <?php header("Content-Type:text/html;charsetutf-8"); error_reporting(0); highlight_file(__FILE__); if(is…

Linux笔记---调试工具GDB(gdb)

1. gdb的概念 GDB&#xff0c;全称GNU Debugger&#xff0c;是一个功能强大的开源调试工具&#xff0c;广泛用于Unix和类Unix系统&#xff0c;以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况&#xff0c;帮助定位和修复程序中的错误。 gd…

服务架构的演进:从单体到微服务的探索之旅

服务架构的演进&#xff1a;从单体到微服务的探索之旅 一 . 服务架构演变1.1 单体架构1.2 分布式架构1.3 微服务1.4 小结 二 . 微服务技术对比2.1 微服务系统架构图2.2 微服务技术对比2.3 企业需求 三 . Spring Cloud 随着企业业务的不断拓展和复杂度的提升&#xff0c;对软件系…