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]用来设置输入采样频率和数字滤波器长度,见下图。其中f_{CK\_INT}是定时器的输入频率(TIMxCLK,这个不了解可以看前面基本定时器章节的框图),一般是72MHz,而f_{DTS}则是根据TIMxCR1寄存器的CKD[1:0]位来设置的,如果CKD[1:0]=00,则f_{DTS}=f_{CK\_INT},N值是滤波长度。

举个例子:假设IC1F[3:0]=0011,并设置IC1映射到通道1上,且为上升沿触发,那么在捕获到上升沿的时候,再以f_{CK\_INT}的频率连续采样到8次通道1的电平,如果都是高电平,则说明是一个有效的触发,就会触发输入捕获中断(如果开启了的话)这样可以滤掉那些高电平脉宽低于8个采样周期的脉冲信号,从而达到滤波的效果。

CKD[1:0]是时钟分频因子,决定f_{DTS}f_{DTS}f_{CK\_INT}经过分频后得到的频率,其关系见下图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引脚,用于触发其他外设的操作;从模式可以接收其他外设或自身外设的一些信号,用于触发自己的一些操作(定时器的运行);触发源选择,即选择从模式的触发信号源功能,也可以认为它是从模式的一部分。

主从触发模式(来源:B站江协科技)

主从模式可以使用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]位配置。

输出比较模式[来源:B站江协科技-PPT]

其中使用最常见的是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口的配置

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

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

相关文章

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息,消息源 Evan Blass 今天在 X 平台发布推文,分享了小米 MIX Fold 4 折叠屏手机的高清渲染图(图片有加工成分在,最终零售版本可能会存在差异…

列表数据合并

WPS: 使用“&”符号合并单元格内容: 在需要合并的单元格中输入A1&B1&C1以此类推,这样可以将多个单元格的内容合并到一个单元格中。 EXCEL: 使用合并连接符号& 在E2单元格中输入B2&C2&D2,然后按enter回车&#x…

基于Vue.js和SpringBoot的地方美食分享网站系统设计与实现

你好,我是计算机专业的学姐,专注于前端开发和系统设计。如果你对地方美食分享网站感兴趣或有相关需求,欢迎随时联系我。 开发语言 Java 数据库 MySQL 技术 Vue.js SpringBoot Java 工具 Eclipse, MySQL Workbench, Maven 系统展示…

英灵神殿mac能玩吗 英灵神殿对电脑配置要求《英灵神殿》新手攻略查询 PD虚拟机能玩英灵神殿吗

近年来,随着《英灵神殿》(Valheim)游戏的火热,越来越多的玩家被其独特的北欧神话题材和丰富的生存挑战所吸引。然而,对于Mac用户来说,如何在Mac平台上运行这款游戏可能是一个问题。此外,作为一名…

数据库day1

MySQL的安装: 采用MySQL的zip格式安装

原创作品—— 文旅类、教育类网站设计

文旅类网站设计应追求简约风格,利用空白和少量文字突出关键信息,吸引用户眼球。同时,采用高质量图片和视频展示文化特色,提升视觉体验。 确保核心功能如搜索、预订、景点介绍等显眼易用,提供清晰的导航栏和响应式设计&…

基于OpenMV识别数字及程序说明

OpenMV简介 OpenMV是一个开源、低成本且功能强大的机器视觉模块。它基于STM32F427CPU,集成了OV7725摄像头芯片,能在小巧的硬件模块上,用C语言高效地实现核心机器视觉算法,并提供了Python编程接口,使得图像处理的复杂度…

探索迁移学习:通过实例深入理解机器学习的强大方法

探索迁移学习:通过实例深入理解机器学习的强大方法 🍁1. 迁移学习的概念🍁2. 迁移学习的应用领域🍁2.1 计算机视觉🍁2.2 自然语言处理(NLP)🍁2.3 医学图像分析🍁2.4 语音…

数字信号处理教程(2)——时域离散信号与时域离散系统

上回书说到数字信号处理中基本的一个通用模型框架图。今天咱们继续,可以说今天要讲的东西必须是学习数字信号处理必备的观念——模拟与数字,连续和离散。 时域离散序列 由于数字信号基本都来自模拟信号,所以先来谈谈模拟信号。模拟信号就是…

Mybatis一级缓存

缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。 Mybatis和Hibernate一样,也有一级和二级缓存,同样默认开启的只有一级缓存,二级缓…

奇瑞被曝强制加班,“896”成常态且没有加班费

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 7 月 2 日消息,一位认证为“奇瑞员工”的网友近期发帖引发热议,奇瑞汽车内部存在强制加班行为,每周加班时长需大于 20 小时并且没有加班费,仅补贴 10 元…

Linux-gdb

目录 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 4.快速跳出函数体 5.其他 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 断点的本质是帮助我们缩小出问题的范围 比如,…

Linux动态库的制作

Linux操作系统支持的函数库分为: 静态库,libxxx.a,在编译时就将库编译进可执行程序中。 优点:程序的运行环境中不需要外部的函数库。 缺点:可执行程序大 动态库,又称共享库,libxxx.so&#…

cv2.cvtColor的示例用法

-------------OpenCV教程集合------------- Python教程99:一起来初识OpenCV(一个跨平台的计算机视觉库) OpenCV教程01:图像的操作(读取显示保存属性获取和修改像素值) OpenCV教程02:图像处理…

NSSCTF-Web题目22(弱比较、数组绕过)

目录 [鹤城杯 2021]Middle magic 1、题目 2、知识点 3、思路 [WUSTCTF 2020]朴实无华 4、题目 5、知识点 6、思路 [鹤城杯 2021]Middle magic 1、题目 2、知识点 代码审计,弱比较、数组绕过 3、思路 打开题目,出现源代码,我们进行审…

强行仅用time.localtime制作“日历牌”——全程记录“顶牛”“调戏”我的AI学习搭子

强行只用time.localtime制作“日历牌”,码好代码试炼通过,想榨取ai智能优化算法,结果失败。本文详细记录“顶牛”全过程。 (笔记模板由python脚本于2024年07月01日 19:16:26创建,本篇笔记适合喜欢python,喜欢搞“事儿”…

安装Gitlab+Jenkins

GItlab概述 GitLab概述: 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。 GitLab拥有与…

【hot100】跟着小王一起刷leetcode -- 739. 每日温度

【hot100】跟着小王一起刷leetcode -- 739. 每日温度 739. 每日温度题目解读思路 代码总结 739. 每日温度 题目解读 739. 每日温度 老规矩,咱先看下题目。总结下来就是,你要返回一个answer数组,answer[i]中存储的应该是temperatures数组中…

解决ps暂存盘已满的问题

点击编辑->首选项->暂存盘 ps默认暂存盘使用的是c盘,我们改成d盘即可 然后重启ps

​​​​​​​​​​​​​​Spark Standalone集群环境

目录 Spark Standalone集群环境 修改配置文件 【workers】 【spark-env.sh】 【配置spark应用日志】 【log4j.properties】 分发到其他机器 启动spark Standalone 启动方式1:集群启动和停止 启动方式2:单独启动和停止 连接集群 【spark-shel…