STM32之五:TIM定时器(2-通用定时器)
目录
通用定时器(TIM2~5)框图
1、 输入时钟源选择
2、 时基单元
3 、输入捕获:(IC—Input Capture)
3.1 输入捕获通道框图(TI1为例)
3.1.1 滤波器:
3.1.2 边沿检测器:
3.1.3 捕获通道:
3.2 PWM输入模式
4、 输出比较:(OC—Output Compare)
4.1 PWM
4.2 PWM模式
4.3 PWM参数计算
4.4 相关寄存器
5、 GPIO配置
在前一章节,我们介绍了STM32的基本定时器STM之四:TIM定时器(1-基本定时器),本节介绍通用定时器,通用定时器包含基本定时器的所有功能,除此之外,其还能有输入捕获、输出比较、编码器接口、主从触发模式等功能。
通用定时器(TIM2~5)框图

可以将通用定时器框图分为4部分,其中第一部分为输入时钟源选择;第二部分为时基单元;第三部分为输入捕获;第四部分为输出比较。
1、 输入时钟源选择
有4种选择方式:
- 内部时钟(CK_INT):时钟信号来自于芯片内部,等于72M,一般情况下都是使用内部时钟。
- 外部时钟模式1:时钟信号来自于定时器的输入通道,即TI1/2/3/4。
- 外部时钟模式2:时钟信号来自于定时器的特定输入通道TIMx_ETR。
- 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,用来实现定时器同步或级联,主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟。
2、 时基单元
这部分可参考STM之四:TIM定时器(1-基本定时器)2.2.3章节部分。此处讲解与基本定时器不同的部分。基本定时器的计数器只能向上计数,但是通用定时器的计数器有三种模式,分别是:向上计数,向下计数,中心对齐模式。
- 向上计数:计数器从0开始计数,CK_CNT每来一个脉冲,计数器就+1,直到计数器的值与自动重装载寄存器ARR的值相等。此时计数器从0开始重新计数并生成计数器上溢事件。
- 向下计数:计数器初始值=自动重装载寄存器ARR的值,CK_CNT每来一个脉冲,计数器CNT的值就减1,直到计数器的值为0。此时计数器从ARR的值开始重新计数并生成计数器下溢事件。
- 中心对齐模式:计数器从0开始向上计数,直到CNT的值等于(ARR-1)时生成计数器上溢事件,然后从ARR的值开始向下计数,直到CNT的值等于1时生成计数器下溢事件。
3 、输入捕获:(IC—Input Capture)
输入捕获可以用来测量脉冲宽度或者测量频率。在输入捕获模式下,当检测到TIMx_CHx上的边沿信号发生跳变的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。
例如通过输入捕获来捕获高电平脉宽。常用的做法可以先设置TIMx_CHx为上升沿检测,记录发生上升沿的时候TIMx_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来时,发生捕获,并记录此时的TIMx_CNT的值。这样前后两次TIMx_CNT之差,就是高电平的脉宽。
3.1 输入捕获通道框图(TI1为例)

观看框图,我们可以发现,输入通道TI1首先进入到滤波器输出为TI1F,滤波器还有另外两个输入项:fDTS和ICF[3:0],之后TI1F经过边沿检测器后输出为TI1FP1,之后将输入通道的信号(TI1FP1/TI2FP2)映射到捕获通道IC1上,经分频器后输入IC1PS中,接入到输入/捕获寄存器。TI1FP1另外还有一个输出至从模式控制器,从模式控制器可以在捕获之后自动完成CNT的清零工作,一般常用于PWM模式下(下文4.1章节有介绍PWM)。下面我们分别介绍这几个阶段。
3.1.1 滤波器:
滤波器的作用是对高频信号进行滤波,重新采样。根据采样定律,采样的频率必须大于等于两倍的输入信号。滤波器的配置由CR1寄存器的CKD位和CCMR寄存器的ICxF位来控制。
这个看的时候很难理解,看到正点原子这里解释的易懂,可参考下。
输入捕获1滤波器IC1F[3:0]用来设置输入采样频率和数字滤波器长度,见下图。其中
是定时器的输入频率(TIMxCLK,这个不了解可以看前面基本定时器章节的框图),一般是72MHz,而
则是根据TIMxCR1寄存器的CKD[1:0]位来设置的,如果CKD[1:0]=00,则
=
,N值是滤波长度。
举个例子:假设IC1F[3:0]=0011,并设置IC1映射到通道1上,且为上升沿触发,那么在捕获到上升沿的时候,再以
的频率连续采样到8次通道1的电平,如果都是高电平,则说明是一个有效的触发,就会触发输入捕获中断(如果开启了的话)。这样可以滤掉那些高电平脉宽低于8个采样周期的脉冲信号,从而达到滤波的效果。

CKD[1:0]是时钟分频因子,决定,
是
经过分频后得到的频率,其关系见下图CKD位描述。

3.1.2 边沿检测器:
边沿检测器用来设置捕获什么边沿的信号,可以是上升沿、下降沿、或者是双边沿,可通过配置捕获/比较使能寄存器TIMx_CCER的CCxP位决定,CCxP=0是上升沿捕获。

3.1.3 捕获通道:
共有4个捕获通道,即IC1/2/3/4,每个捕获通道都有相对应的捕获寄存器CCR1/2/3/4,当发生捕获的时候,计数器CNT的值就会被锁存到捕获寄存器CCR中。
这里要搞清楚输入通道和捕获通道,4个输入通道分别为TI1/2/3/4,是为了输入信号的,而捕获通道是用来捕获输入通道的信号的。输入通道并不是一一对应捕获通道的,一个输入通道的信号可以同时输入给两个捕获通道。
看下图,输入通道TI1可以占用捕获通道IC1和IC2,输入通道TI2可以占用捕获通道IC1和IC2,输入通道TI3可以占用捕获通道IC3和IC4,输入通道TI4可以占用捕获通道IC3和IC4。这样进行交叉连接的目的是两个: 1.一个输入通道灵活切换两个捕获通道,可以灵活切换后续捕获电路的输入; 2.两个通道同时捕获一个引脚,可以把一个引脚的输入,同时映射到两个捕获单元,这也是PWM输入捕获的经典结构,实现两个通道(IC)对一个引脚(TI)进行捕获,就可以同时测量频率和占空比,具体可详见下面3.2章节PWM输入模式。
辰哥单片机设计 STM32-定时器详解,侵删。这个图比较清晰,一目了然)
通过TIMxCMMRx寄存器的CCxS位可以配置捕获通道映射在那个输入通道上,详看下图:

看完上面的说明,在读下参考手册的输入捕获模式的介绍,应该就会有一个全面的了解了。

B站江协科技up主对于输入捕获总结的很详细,此处引用其总结框图

3.2 PWM输入模式
PWM模式是输入捕获的一个特殊情况,在该模式下同一个输入通道(例如TI1)占用两个捕获通道(IC1和IC2),两个通道的捕获边沿极性相反(因为PWM输入捕获模式下,其中一个捕获通道测量周期,另外一个捕获通道测量占空比,周期需要捕获两个连续的相同边沿例如两个上升沿来进行测量,但是测量占空比需要捕获一个上升沿,之后紧接着捕获一个下降沿来测量高电平脉宽,因此两个捕获边沿极性相反)。
CCR对CNT进行捕获之后,需要对CNT进行一次清0操作,这样每次捕获得到的值才是两个上升沿(下降沿)之间的时间间隔。这个清零操作,可以使用主从模式通过硬件自动完成。由输入捕获输入部分框图来看,TI1FP1信号可以通向从模式控制器,从模式控制器可以通过硬件电路自动完成CNT清零操作。
下面我们看下主模式、从模式、触发源这三个概念。
主模式可以将定时器内部的信号映射到TRGO引脚,用于触发其他外设的操作;从模式可以接收其他外设或自身外设的一些信号,用于触发自己的一些操作(定时器的运行);触发源选择,即选择从模式的触发信号源功能,也可以认为它是从模式的一部分。
主从模式可以使用TIMx_CR2寄存器的MMS位进行配置。

从模式控制寄存器TIMx_SMCR的SMS位可以进行从模式选择,TS位进行触发选择。


同样,参考手册中对于PWM输入模式说明的也很详细,可参考理解。

同样,引入B站江协科技UP的总结框图,有利于记忆和理解。

首先TI1FP1配置上升沿触发,触发捕获和清零CNT,正常的捕获周期,再来一个TI1FP2,配置为下降沿触发,通过交叉通道去触发通道2的捕获单元(最开始上升沿CCR1捕获同时清零CNT,之后CNT一直加,然后在下降沿时刻触发CCR2捕获,这时CCR2的值就是CNT从上升沿到下降沿的计数值也就是高电平期间的计数值,CCR2捕获并不触发CNT清零,所以CNT继续加,直到下一次上升沿,CCR1捕获周期并CNT清零,这样执行之后CCR1就是一整个周期的计数值,CCR2就是高电平期间的计数值,用CCR2/CCR1就是占空比,以上就是PWMI模式使用两个通道来捕获频率和占空比的思路
4、 输出比较:(OC—Output Compare)
输出比较功能是用来控制一个输出波形,就是通过定时器的外部引脚对外输出控制信号,可输出八种模式,具体哪种模式可由捕获/比较模式寄存器TIMx_CCMRx的OCxM[2:0]位配置。
其中使用最常见的是PWM模式。
4.1 PWM
PWM(Pulse Width Modulation)简称脉宽调制,是一种利用微处理器的数字输出来对模拟电路进行控制的一种技术。

4.2 PWM模式
定时器输出比较的PWM模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在PWM模式下,TIMx_CNT和TIMx_CCRx始终在进行比较,根据比较值对输出进行置1、置0或者翻转的操作。

以CCR1为例,CNT和CCR1经过比较,将比较值输入到输出模式控制器中,输出模式控制器共有8种模式(即为上图输出比较模式的8种),PWM下可以选择PWM1和PWM2模式,这两种模式不同之处在于输出的极性相反。输出模式控制器输出一个oc1ref信号,该信号为输出参考信号,该信号后续有两路输出,其中一路输出至主模式控制器,PWM模式下不关注这个。另外一路输出至一个选择器,该选择器由TIMx_CCER寄存器CCxP控制,若oc1ref为0,则直接接入到输出使能电路。若oc1ref为1,则该信号通过非门跳转信号接入至输出使能电路。输出使能电路由TIMx_CCER寄存器TIMx_CCxE位控制,后续经过OC1通道输出信号。
4.3 PWM参数计算

4.4 相关寄存器
主要有3个寄存器来控制PWM,分别是:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。

捕获/比较模式寄存器共有两个(TIMx_CCMR1/2)共有2个,TIMx_CCMR1控制CH1和CH2,TIMx_CCMR2控制CH3和CH4。其中通过配置OCxM[2:0]位为110、111,即PWM1和PWM2模式。


捕获/比较使能寄存器,主要用到了CCxE位,改位为输入捕获/输出比较使能位。要想PWM从I/O口输出,则该位必须置1。

在输出模式下,捕获/比较寄存器(TIMx_CCRx)的值与CNT的值比较,根据比较结果产生相应动作,所以,利用这点通过修改CCRx寄存器的值,可以调整PWM输出的脉宽。
最后看下参考手册中对于PWM输出模式的介绍,加深下了解。

5、 GPIO配置
此处在注意下各种不同模式下,GPIO口的配置

相关文章:
STM32之五:TIM定时器(2-通用定时器)
目录 通用定时器(TIM2~5)框图 1、 输入时钟源选择 2、 时基单元 3 、输入捕获:(IC—Input Capture) 3.1 输入捕获通道框图(TI1为例) 3.1.1 滤波器: 3.1.2 边沿检测器…...
【分布式系统】监控平台Zabbix对接grafana
以前两篇博客为基础 【分布式系统】监控平台Zabbix介绍与部署(命令截图版)-CSDN博客 【分布式系统】监控平台Zabbix自定义模版配置-CSDN博客 一.安装grafana并启动 添加一台服务器192.168.80.104 初始化操作 systemctl disable --now firewalld set…...
操作系统真象还原:编写硬盘驱动程序
第13章-编写硬盘驱动程序 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 13.1 硬盘及分区表 13.1.1 创建从盘及获取安装的磁盘数 要实现文件系统,必须先有个磁盘介质,虽然咱们己经有个虚拟磁盘 hd60M.img,但它只…...
firewalld防火墙(二)
一:firewalld高级配置 1:关于iptables的知识 iptables 是Linux系统中传统的命令行防火墙管理工具,它基于内核的netfilter框架工作,用于配置和管理网络规则集,比如过滤(允许/拒绝)进出的数据包…...
Android-悬浮窗口
在Android系统中,如果应用需要弹出一个悬浮窗口,就需要申请一项特殊权限 <uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW"/>在Android O之前的系统中申请了该权限后,再给对应的window设置 WindowM…...
打破僵局:Foxit Reader无法打开的终极解决方案
打破僵局:Foxit Reader无法打开的终极解决方案 在数字化阅读时代,Foxit Reader作为一款广受欢迎的PDF阅读器,其打不开的问题无疑会给用户带来诸多不便。本文将为您提供全面的解决方案,从基础检查到高级技巧,确保您能够…...
[调试] JTAG下运行正常,从QSPI或者SD卡启动则无响应,如何查找问题
[调试] JTAG下运行正常,从QSPI或者SD卡启动则无响应,如何查找问题 一、问题现象二、用自定义fsbl替代系统默认的fsbl1. 新建fsbl_new2. 如果提示缺少xilffs库3. 使能调试信息输出 三. 启动成功和失败情况下的典型输出1. JTAG启动模式: 正常加载2. QSPI启…...
Linux内核 -- 多线程之wait_event用法
Linux Kernel 中 wait_event 的高级用法及注意事项 在Linux内核编程中,wait_event 系列函数是用于实现进程等待和事件通知机制的重要工具。本文将详细介绍 wait_event 的高级用法以及注意事项。 1. 基本用法 wait_event 系列宏主要包括以下几种形式: …...
双指针系列第 8 篇:盛水最多的容器。几句话讲明白!
Leetcode 题目链接 思路 取首尾双指针和水量如下所示,设高度函数为 h ( i ) h(i) h(i),在下图中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)。 观察以 l l l 为左边界所能构成的其他水量,与矮的右边界搭配结果如下。 与高的…...
c++高阶-1-模板
文章目录 模板一、模板基本语法二、函数模板1.基本语法2.函数模板注意事项3.普通函数和函数模板区别4.普通函数和函数模板调用规则 三、类模板1.基本语法2.类模板和函数模板的区别3.类模板中成员函数调用时机4.类模板对象做函数参数5.类模板与继承6.成员函数的类外实现 模板 一…...
.net core 的 winform 的 浏览器控件 WebView2
在.NET Core WinForms应用程序中,没有直接的“浏览器控件”,因为WinForms不支持像WebBrowser控件那样的功能。但是,你可以使用WebView2控件,它是一个基于Chromium的浏览器内核,可以在WinForms应用程序中嵌入Web内容。 …...
Django QuerySet对象,all()方法
all()方法 在Django中,all()方法是QuerySet对象的一个方法,用于获取模型的所有实例。 当你调用ModelName.objects.all()时,Django会生成一个SQL查询,从数据库中获取该模型的所有记录,并返回一个QuerySet对象…...
自动生成网站sitemap
要在 Next.js 和 Contentlayer 项目中实现自动生成 Sitemap 的功能,你可以编写一个脚本,在每次生成文档后自动生成 Sitemap。以下是一个示例脚本,你可以根据自己的需求进行调整。 步骤 1:安装必要的依赖 首先,你需要…...
中国经济昆虫志(55卷)
中国经济昆虫志,共55卷,内容包括概述、形态特征、分类等。各级分类单元均编有检索表,每个种有特征描述、地理分布,有的还记载有生活习性和防治方法。为便于鉴定,绘制有特征图和彩色图。 包括鞘翅目天牛科、半翅目蝽科、…...
linux环境安装elasticsearch缓存数据库和Kibana客户端
linux环境安装elasticsearch缓存数据库,今天我们安装7.17.18版本,并分析遇到的问题。 一、elasticsearch安装运行 1、直接下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.18-linux-x86_64.tar.gz2、解压 tar -…...
OpenSSL的一些使用案例
目录 一、介绍 二、基本使用 1、Shell (1)文件加解密 (2)生成密钥文件 2、API (1)md5sum (2)AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法,只…...
常用字符串方法<python>
导言 在python中内置了许多的字符串方法,使用字符串方法可以方便快捷解决很多问题,所以本文将要介绍一些常用的字符串方法。 目录 导言 string.center(width[,fillchar]) string.capitalize() string.count(sub[,start[,end]]) string.join(iterabl…...
线程池666666
1. 作用 线程池内部维护了多个工作线程,每个工作线程都会去任务队列中拿取任务并执行,当执行完一个任务后不是马上销毁,而是继续保留执行其它任务。显然,线程池提高了多线程的复用率,减少了创建和销毁线程的时间。 2…...
Python28-5 k-means算法
k-means 算法介绍 k-means 算法是一种经典的聚类算法,其目的是将数据集分成 ( k ) 个不同的簇,每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置,使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…...
主流国产服务器操作系统技术分析
主流国产服务器操作系统 信创 "信创",即信息技术应用创新,作为科技自立自强的核心词汇,在我国信息化建设的进程中扮演着至关重要的角色。自2016年起步,2020年开始蓬勃兴起,信创的浪潮正席卷整个信息与通信技…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
