当前位置: 首页 > news >正文

通用定时器的基本介绍与功能概述

引言

       前面我们学习了系统定时器以及基本定时器,可以发现它们的功能比较简单,基本都只能实现一个计时定时中断的功能。那么本次我们将介绍一类功能相对更加丰富的定时器——通用定时器。这类定时器属于“标准版”,也就是说其功能是定时器一般都拥有的,其功能包含了前面基本定时器的所有功能,还增加了几个功能,因此其结构也相对复杂一些。那么话不多说,接下来我们先整体介绍一下通用定时器的相关内容,对其有一个基本的认识。


一、通用定时器的基本介绍

       通用定时器由于拥有一般常用的功能,因此其数量是最多的,一共有4个,包括TIM2、TIM3、TIM4、TIM5,它们拥有基本定时器的所有功能,并且还增加了几个很常用的功能。

       1、含有多种时钟源。前面介绍的基本定时器只有一种内部时钟元,而通用定时器含多种时钟源,这意味着通用定时器的时钟信号可以不仅仅来自系统时钟,还可以接收其他定时器外设的输入信号或来自STM32芯片外部的输入信号作为时钟信号源,这也是使得通用定时器能够拥有更多功能的一个原因,使得通用定时器功能相对强大。

       2、计数方式多样化,包括了向上计数、向下计数以及向上/向下计数。通用定时器相对基本定时器多了向下计数以及向下/向上计数的计数方式,其中向上计数就是从0开始递增的方式进行计数、向下计数就是从设置的自动重装载值开始向下递减到0的方式进行计数、向上/向下计数就是先从0开始递增,再又开始递减到0这样循环的方式进行计数。

       3、输入捕获模式。通用定时器可以捕获外部输入的信号作为其信号源进行计数,当然大家可能第一次听说,还难以想象,后面实际用到的时候就能理解了。

       4、输出比较模式。简单来说就是通用定时器不断计数,然后有一个参考值,通过将计数数值与这个参考值进行对比,确定计数数值在参考值之前输出什么电平、参考值之后又输出什么电平到外部,大概是这个意思。

       5、PWM生成。通用定时器可以直接产生一段PWM波,然后输出给其他外设。PWM大家可能学过51单片机或者其他MCU时接触过,实际上就是一段方波,只不过一个周期中高低电平的占比可能不同。

       6、通用定时器还支持针对定位的增量(正交)编码器和霍尔传感器电路,这在一些电机控制等地方用到的可能多一些。

以上就是通用定时器的整体介绍,简单总结一下

       通用定时器包括TIM2、TIM3、TIM4、TIM5这四个。它们拥有基本定时器的所有功能。并增加了以下功能:

  1. 多种时钟源。
  2. 向上计数(加),向下计数(减),向上/向下(先加后减)。当然我们更常用的还是向上计数
  3. 输入捕获。
  4. 输出比较。
  5. PWM生成。
  6. 支持针对定位的增量(正交)编码器和霍尔传感器电路。

二、通用定时器的功能框图

       接下来,我们简单分析一下通用定时器的框图,了解一下其构成以及相关功能。还是进入STM32的参考手册,在通用定时器那一章找到通用定时器框图,如下图所示。

       可见,通用定时器的框图比前面的基本定时器要复杂很多,当然,我们接下来分模块介绍,争取能够对该图有一个基本的认识。

2.1 框图的整体概述

       首先,我们可以看见框图中间其实包含了基本定时器的结构,这也是定时器的一个核心部分,即时基单元,如下图所示。

       然后上方按照基本定时器框图的认识,这里应该能猜到也是输入的时钟信号经过触发控制器给到时基单元这一结构,只不过在通用定时器这里包含了多种时钟源,因此上方部分复杂了不少,不过现在我们能够清楚:上方部分实际上就是不同的时钟信号输入的走向,如下图所示。

       最后,就是框图的下方了,这也是前面基本定时器压根就没见过的东西。仔细想想,前面说过基本定时器没有外接IO,因此没法进行输入输出,而通用定时器就有一些外接的IO口,因此能够实现更多的功能,即前面所述的输入捕获、输出比较等功能。因此实际上通用定时器框图的偏下方部分主要就是其执行捕获/比较功能的结构,如下图所示。

       由图中可以看见,这里有四部分,每一部分实际对应一个输入信号通道,信号经过左边的CHx(x=1~4)进入,经过一些处理给到【捕获/比较x寄存器】实现一个输入捕获的功能;其次计数器可以将计数值给到【捕获/比较寄存器】进行一个比较,获取指定方波,然后经过右边的CH通道输出给外部使用,实现一个输出比较的功能。关于各自功能的详细介绍,我们在后面的案例中进行说明,这里只做一个概述。

       好了,到这里,相信大家应该对整个框图的结构有一个整体认识了。那么接下来,我们就深入介绍一下其中核心的信号走向。

2.2 基本结构

       根据前面介绍,通用定时器包含了基本定时器的所有功能,原因可以通过通用定时器的功能框图进行理解。通过查看框图,我们可以发现通用定时器框图中完整包括了基本定时器中的内部时钟、触发控制器以及时基单元三个部分,如下图所示。

       很明显,对比基本定时器框图可以发现通用定时器已经完整包括了它,即内部时钟(一般72MHz)、触发控制器、时基单元(PSC预分频器、CNT计数器、自动重装载寄存器)

2.3 三种时钟源

2.3.1 内部时钟源

       除此之外,通用定时器的时钟源有三种,首先就是最基本的内部时钟源,如下图。一般为72MHz,这是指一般情况,原因在基本定时器已经详细说明,这里不再赘述。

2.3.2 通道输入信号作为时钟源

       其次就是其中一种外部输入时钟源。这是由外部输入进来的,可以看见框图中下方有四个引脚,这被称为通用定时器的四个信号输入通道,主要是用于捕获的。其中通道1和通道2也就是CH1和CH2这两个通道输入的信号可以用作通用定时器的时钟信号源,如下图所示。

       可见,输入信号可以通过CH1和CH2进入通用定时器内部,然后经过输入滤波器和边沿检测器变成T1FP1和T2FP2,最后直接给到触发控制器的编码器接口或者作为触发输入给触发控制器,称为外部输入的时钟源,供时基单元使用

2.3.3 触发信号源作时钟信号

       其次,还有一种外部输入时钟源,也就是框图上方引出的一个ETR引脚,这是一个特殊的引脚,专门用来输入外部时钟信号的,如下图所示。

       如图,通用定时器还可以通过特殊引脚ETR输入的信号经过极性选择、边沿检测和预分频器以及输入滤波成为ETRF信号,然后直接送到触发控制器,进而给到时基单元作为输入的时钟信号源。其中这个ETR引脚时通用定时器特有的引脚,ETR引脚也就是外部触发的意思,即这是一个外部触发源,从图上可以看见其除了直接给到触发控制器外,还可以作为触发输入给触发控制器,一方面作触发输出到其他外设、另一方面给到时基单元作时钟源使用。该引脚一般是复用的GPIO口,比如TIM3的ETR引脚就是PD16,如下图所示(数据手册可查)

2.3.4 三种时钟源的选择

       介绍完通用定时器的三种时钟源后,接下来聊一聊如何选择他们。首先我们一般默认选择的就是内部时钟源,也是最常用的时钟源

       其次,外部输入的时钟源一般用于定时器的级联。什么是定时器的级联呢?就是将另外的定时器输出的信号作为当前定时器输入的时钟信号源,利用其他的定时器控制当前这个定时器的计数。接收外部定时器输入信号的引脚一种是通过输入通道CH1和CH2输入进去,另一种就是通过外部触发源引脚ETR直接输入。

       当然,实际上还有一种方式,如下图所示。

       这部分咱前面都还没有说到,看着也是一部分输入信号,可以给到触发控制器作时钟源输入。实际上,这是叫做内部触发源ITR,他可以将我们芯片内部的信号通过这里输入给通用定时器去作为输入信号。换句话说,通过ITR可以直接在芯片内部接收其他外设发来的信号,然后当做触发输入给触发控制器去作触发输出或者时钟信号,而这里的外设可以是其他定时器也可以是其他的外设模块输出的信号。当然也可以发现CH1输入的信号也可以给到那个复用选择器作为触发输入。

       总结一下,对于三种时钟源的选择:

一般外部时钟源用作进行定时器的级联,通常有三种方式

       一是直接将其他定时器输出的信号接给ETR引脚,然后流向触发控制器去选择作为时钟源控制定时器计数;

       二是将其他定时器输出的信号经过CH1或CH2这俩外部信号输入通道给到触发控制器的编码器接口,然后选择作为时钟源给时基单元去控制定时器计数;

       是直接在芯片内部将其他定时器产生的信号给ITR作触发输入给触发控制器,选择作为时钟信号控制定时器计数。


        而大多数情况下,我们默认使用内部时钟源就足够了


三、计数模式的理解

       接下来再介绍一下通用定时器的计数模式。其实经过前面的基本介绍,大家对其计数方式应该有了一个简单的认识了。这里再专门聊一下是为了借助手册中的时序图来加深我们对其三种计数方式的理解。

       通用定时器的计数方式有三种,分别是向下计数模式向上计数模式以及中央对齐模式(也就是前面所说的向上/向下计数模式)。

3.1 向上计数模式

       向上计数,简单来说就是计数器从0开始递增的计数方式,当递增到自动重装载寄存器中的数值时发生溢出,随后计数器重新从0开始继续递增计数,以此循环往复。当TIMx_ARR=0x36时,向上计数模式下计数器的时序图如下

3.2 向下计数模式

       向上计数,简单来说就是计数器从设置的自动重装载值开始递减的计数方式,当计数器递减到0时发生溢出,随后计数器重新从设定的自动重装载值开始继续递减计数,以此循环往复。当TIMx_ARR=0x36时,向下计数模式下计数器的时序图如下

3.3 中央对齐模式

       中央对齐模式,也称向上/向下计数模式。该模式下,计数器从0开始计数到自动加载的值−1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数,以此循环往复。当TIMx_ARR=0x06时,中央对齐模式下计数器时序图如下

       如图,这是自动重装载值为6的中央对齐模式下的时序图,一开始从0开始计数,然后先递增到5(也就是设置的自动重装载值-1)的地方,再来一个时钟上升沿就产生一个溢出事件,紧接着开始向下计数,从设置的自动重装载值6开始递减计数,当递减到0后的下一个时钟上升沿又会产生一个溢出事件,这样就完成了一轮的中央对其模式的计数。

       当然,我们一般喜欢用的计数模式就是向上计数,这更贴近人类习惯。不过中央对齐模式有一个优点,就是可以发现,它会在设置的ARR-1处就准备产生溢出事件,这个时候设置ARR为6,其计数次数就是6,然后发生溢出一次,由上图中很明显可以看见0-5溢出一次,恰好6次,与我们设置的自动重装载值一样的。这意味着使用中央对齐模式进行计数时,我们设置ARR的值不需要-1了,直接设置实际计数的次数就好

3.4 配置方式

       总而言之,我们一般使用的是向上计数模式,配置方法也很简单,直接找到通用定时器的控制寄存器CR1,其中有一位DIR,就是用来设置计数方向的,如下图所示。

       DIR位,也叫方向位,置0则计数器向上计数,置1则计数器向下计数。若想要选择中央对齐模式计数的话,就需要另外配置其他位了。同时可以看见CR1寄存器复位值为0x0000,这意味着默认DIR位是置0的,也就是说默认计数器是向上计数模式。


四、小结

       本文主要介绍了STM32通用定时器(TIM2-TIM5)的功能特点。与基本定时器相比,通用定时器具有更丰富的功能:支持多种时钟源(内部、外部ETR引脚、通道输入)、三种计数模式(向上/向下/中央对齐)、输入捕获、输出比较、PWM生成以及编码器接口等。文章简单分析了通用定时器的功能框图,重点讲解了三种时钟源的选择方式(内部时钟、外部ETR输入、通道输入)以及三种计数模式的工作原理和时序图。

       关于通用定时器的输出比较、输入捕获以及PWM生成功能的详细介绍在后续案例中进行说明,敬请期待。


以上便是本次文章的所有内容,欢迎各位朋友在评论区讨论,本人也是一名初学小白,愿大家共同努力,一起进步吧!

鉴于笔者能力有限,难免出现一些纰漏和不足,望大家在评论区批评指正,谢谢!

http://www.dtcms.com/a/442263.html

相关文章:

  • 洛谷 P14115:[IAMOI R4] 木桶效应 ← 二分
  • Python pip -U参数作用及使用建议
  • python全栈(基础篇)——day03:基础内容(字符串格式化+简单数据类型转换+进制的转换+运算符+实战演示+每日一题)
  • 学网站建设能赚钱吗网上购物哪家质量好
  • 基于ASRPRO的语音对话
  • 女人与狗做网站天津重型网站建设风格
  • 拼图小游戏开发日记 | Day3(已完结)
  • Go 1.25 新特性:正式支持 Git 仓库子目录作为 Go 模块
  • 鸿蒙NEXT Remote Communication Kit:打破设备壁垒,构筑无缝协同体验
  • 那些网站建设的好杭州建站程序
  • 做团购网站企业网站设计调查问卷
  • 基于 RoBERTa + 多策略优化的中文商品名细粒度分类
  • 做翻译兼职的网站是哪个特色的网站建设
  • 山西建设银行招聘网站crm系统的销售管理功能包括
  • 如何在C#中配置ONNX Runtime以确保准确性和目标框位置的正确性?
  • PiscCode使用YOLO识别超大分辨率高清视图实践
  • 力扣2200. 找出数组中的所有 K 近邻下标
  • 文化馆网站建设情况在微信上做彩票网站有哪些
  • 网站301怎么做企业法治建设工作计划
  • list模拟实现(简单版)【C++】
  • 烟台网站建设哪家好呢维护一个网站需要多少钱
  • 什么网站做视频最赚钱wordpress无法使用ajax
  • 对接MCP服务之sse/streamable-http模式
  • springMVC中/*与/**匹配的区别
  • 如何快速学习一个网络协议?
  • 从安装到上手实战——Docker 基础命令全解析
  • 虚拟机怎么做网站昆明seo技术培训
  • 免费dede企业网站模板wordpress qa
  • autodl 安装modelscope OCR 模型 dots_ocr 笔记心得
  • Linux中文件目录结构介绍以及对目录的操作