【高级定时器TIM1:掌握时间,节省资源】

目   录

1. TIM功能框图及简述

2.   时钟源部分

3. 控制器部分

4. 时基部分

5. 输入捕获部分

6. 输入捕获和输出比较共用部分

7. 输出比较部分

8. 产生中断/DMA的条件

9. 各寄存器功能简单总结

10. 一般配置思路


1. TIM功能框图及简述

        1:时钟源部分

        2:控制器部分

        3:时基部分

        4:输入捕获部分

        5:输入捕获和输出比较共用部分

        6:输出比较部分

        高级TIM所包含的部分基本为这6个,下面将一一讲解,了解整体架构后,再看说明书去配置,会事半功倍。

2.   时钟源部分

        首先使用高级TIM,就必须要选择时钟源,高级TIM提供了4种方式提供时钟源。

       1. 内部时钟源———CK_INT:就是片上提供的系统时钟。

      2. 外部时钟模式1—外部GPIO Tix:可以通过GPIO或者其他方式连接该引脚,从而提供时钟(通过它提供时钟的方式不经常用):

        信号的运行路径如下:

        以下为外部时钟1部分的详图:

       3. 外部时钟模式2—外部GPIO ETR:与外部时钟模式1类似,可以通过GPIO或者其他方式连接该引脚,从而提供时钟(通过它提供时钟的方式不经常用):

        以下为外部时钟2部分的详图 

        外部时钟1和2的区别:

            1.外部时钟1提供没有divider(分频器),外部时钟2提供divider,2模式可以进行降频。

            2.外部时钟1共有4个通道可用(CHx),外部时钟2仅有一个通道可用(CH1)。

        4. 内部触发输入:

        使用该模式时,可以将另一个TIM设置为主模式,从而可以TRGO输出时钟,用作该TIM的时钟。简单讲,就是两个TIM共用一个时钟。

        内部触发输入如下图:

        作用:

        接收“主定时器”发送的时钟。

        如下图:

 

3. 控制器部分

        

        如图为控制器部分框图。

        讲完时钟了,要了解下控制器部分,其实控制器用作选择做这三件事:

                1. 是否设置为主模式,这样的话就能把自己的时钟,通过TRGO这个引脚,输出出去,这个引脚可以连接到另一个TIM的ITRx引脚,从而实现共用时钟,其实上面提到过。

                2. 是否配置触发模式,就是不通过使能寄存器来让TIM工作,而是通过一个规定电平来触发,可以是上升沿、下降沿,从而让TIM工作,或者复位,等。

                3. 选择那种方式提供时钟,时钟源部分只是讲了,有哪些时钟,但真正选择用哪一个,在该部分配置。

        看两个寄存器的功能描述涵括其所拥有的作用(实际牵连的寄存器不仅此两个):

        主模式选择位

        位6:4 MMS[1:0]:Master mode selection

        这些位可选择主模式下将要发送到从定时器以实现同步的信息(TRGO)。

        作用

        使能输出TRGO(Trigger Output)提供自己的时钟给其他定时器

        例如如图: TIM1将自己的时钟做为TRGO提供,TIM2接收TRGI,做为TIM2的时钟。

        从模式选择位

  1. 000禁止从模式:选择内部时钟,直接提供时钟到时基部分,无法开启触发功能。
  2. 100复位模式:所选触发输入(外部时钟输入)上升或下降时,reset时基部分的计数器。
  3. 101门控模式高电平或低电平使能时基部分的计数器,反向电平停止计数。
  4. 110触发模式:上升沿或下降沿启动计数器
  5. 另外外部时钟也可选择不使用触发的模式。

        作用:

        使能输出TRGI(Trigger Input)

        控制器的作用:

  1. 提供Trigger Output
  2. 提供Trigger Input
  3. 选择时钟。

        注:

        1. 触发共三种功能: 复位、门控、启动。

        2.这里提到的主模式和从模式没太大关系,一个TIM可以同时使用主从模式。

                例如:TIM1可使用内部时钟 + 启动trigger + 提供TRGO。

                效果:触发后,启动时钟并把时钟提供给“从TIM”。

        3.常使用外部时钟1的通道作为触发通道。

                例如:可以使用CH1作为触发,我们设置为上升沿触发,之后,选择时钟源为内部时钟源。这里不要晕,触发和时钟源是两回事,CH1可以作为提供时钟源的引脚(配置CH1为外部时钟模式1),也可以作为触发,他们使用的通道和信号的路径是一样的而已,当然CH1配置为触发时,就不能再作为外部时钟引脚了,可以用CH2!但是UP没试过,理论可以。

4. 时基部分

        时基部分,是整个TIM最最最核心的部分,可以说是大脑,下面一切功能都是围绕CNT这个寄存器做的。

        PSC是分频器,可以通过它来给输入过来的时钟分频进行分频,之后,在配置使能后,每个CK_CNT(就是从分频器出来的时钟),CNT counter就++或者–,看下面怎么配置的,当CNT==ARR(auto-reload register,自动装置寄存器,就是当CNT上下溢了,就可以将ARR的值重新给CNT),就产生更新事件。这里根据配置,不一定就是CNT==ARR,也可能CNT==0,下面会讲解。

        REP寄存器用于配置重复计数(RCR),CNT每次自动重装时REP-1,到REP等于0时产生更新事件(可以是中断,可以是唤醒DMA,在于如何配置相应寄存器)。

        预分频寄存器(PSC)为16位寄存器。

        计数寄存器(CNT)为16位寄存器。

        自动装载寄存器(ARR)为16位寄存器。

        和TIM类似,控制器提供CK_PSC到PSC,PSC提供CK_CNT到CNT,CNT开始计数。

        CNT计数方式共三种,up / down / center

        Up:CNT从0开始++计数,当值等于自动装载寄存器(ARR)时,产生更新事件,CNT再次从0计数。

        Down:CNT从自动装载寄存器值(ARR)开始- – 计数,到0时,产生更新事件,CNT再次装载ARR的值。

        CenterCNT从0开始++计数,等于ARR-1时,产生更新事件,CNT此时等于ARR-1,从该值- -计数,等于0时,产生更新事件。

5. 输入捕获部分

        OK,以上的基础部分讲解完毕,下面就是重要的功能部分了。

        作用:

        测量输入信号的周期

        测量输入PWM信号的占空比/周期。

        工作原理:

        当捕获到信号的跳变沿(上升/下降/双沿)时,把CNT的值锁存到CCR中,产生更新事件(中断/DMA)。

        测量原理(以下为软件操作)

        每次产生更新事件(中断/DMA),在处理函数中(中断/DMA)读取CCR的值并保存,将上次捕获的CCR值与本次相减,结果可计算脉宽或周期。

        注:

        当设置单沿捕获时,结果可计算周期

        当设置双沿捕获时,结果可计算周期/脉宽,但是无法知道脉宽是高电平的,还是低电平的,因为无法具体判断是上升还是下降触发的

        整体框图如下:

        如图,一个输入信号通道可以占用两个捕获通道(IC1和IC2),TI1FP1可以给IC1TI1FP2可以给IC2,因此可以用该方法测量输入PWM的占空比及周期。

        测量PWM输入的占空比及周期

        CH1做为输入通道,IC1捕获上升沿,IC2捕获下降沿。

        与普通方法比较:

  1. 普通方法该过程需要产生两个中断,该方法仅需要产生一个中断。就是说,PWM输入捕获模式,其实就是用了两个寄存器来分别捕获上升沿、下降沿触发时的CNT的值了,看上图可知,TI1刚上升时,IC1和IC2复位(或者IC1捕获CNT的值,这里其实是配置成了触发复位的方式),也可以理解为,TI1刚上升时,IC1捕获CNT的值,TI1下降沿时,IC2捕获CNT的值,此时可以让IC2不产生中断,只让IC1产生中断,(因为下个触发是IC1,所以IC2的值不会变化,这样就不影响)这样就能少一个中断的产生。
  2. 普通方法测PWM,只能用双沿触发,因为无法判断上升还是下降沿,因此无法算出占空比。

        如下图:

        无法确定是A,还是B。

6. 输入捕获和输出比较共用部分

        捕获/比较寄存器(CCR)为16bit。

        输入捕获时:该寄存器做捕获寄存器。

        输出比较时:该寄存器做比较寄存器。

        因此不管是输入捕获还是输出比较,亦或是两者混合,同时使用的个数都不能超过4。

7. 输出比较部分

        作用:

        通过定时器的外部引脚对外输出控制信号。

        常用做PWM输出

        工作原理:

        CNT <=  CCR 时输出高/低电平。

        CNT >   CCR 时输出反向电平。

        PWM输出:

        PWM输出与普通输出比较原理一样,仅寄存器配置的不同。

        总体分两种:边沿对齐模式、中心对齐模式

        其实就是基时部分CNT的计数方式,up/down 为边沿对齐,center为中心对齐

        简单解释下:看上图,拿DOWN模式举例,CNT初始值等于ARR,假设CNT==ARR==0XFFFF,我们假设配置假设CNT <= CCR 输出高,CNT>CCR输出低。刚开始,CNT==ARR且CNT>CCR,此时输出低,随着CNT- – ,当CNT==CCR了,此时就输出高,后面就好是CNT<CCR,依旧输出高。

        假设CNT <= CCR 输出高,CNT>CCR输出低。输出的PWM如下图:

        整体框图

8. 产生中断/DMA的条件

        以下各条件可通过寄存器使能或关闭:例如你可以配置CNT==0时,不让他产生更新事件(中断/DMA),例如:你可以配置捕获输入CCR1,捕获到目标信号后,不产生中断。

  1. 更新事件(CNT上/下溢出)
  2. 捕获(输入捕获时,捕获到目标信号)
  3. 比较(输出比较时,CNT == CCR)

9. 各寄存器功能简单总结

一下部分为UP呕心沥血整理的,当想配置对应部分了,就可以直接到对应寄存器里找,另外,并不是非常准确,毕竟STM在这块设计就很乱,如果看手册了就知道我这话的意思了,但整体是准确的。

1.  CR1:  时基配置。

2.  CR2:  控制器配置。

3.  SMCR:  控制器配置。

4.  DIER:    使能 中断/DMA相关配置。

5.  SR:    状态 中断相关配置。

6.  ERG:  是否产生中断/DMA 中断/DMA相关配置。

7.  CCMR1:CH1/CH2 捕获/比较配置。

8.  CCMR1:CH3/CH4 捕获/比较配置。

9.  CCER:  使能 捕获/比较配置。

10.  CNT:  计数寄存器。

11.  PSC: 分频寄存器。

12.  ARR: 自动装载寄存器。

13.  DCR: DMA配置相关。

14. DMAR: DMA配置相关。

15. CCR1/CCR2/CCR3/CCR4:捕获/比较寄存器。

10. 一般配置思路

其实你看到的所有乱七八糟的功能,都是通过这几个部分的不同工作模式,组合而成的。

例如:

        什么单脉冲模式啊:就是CH2做触发,使用内部时钟,使用比较输出,输出一个脉冲。

1:时钟源部分

2:控制器部分

3:时基部分

4:功能部分:

        输入捕获部分

        输出比较部分

以上按照1-4的顺序配置,即可

有了以上知识,再去看STM的高级定时器TIM1&TIM8的说明书部分,应该会清晰很多。

物联沃分享整理
物联沃-IOTWORD物联网 » 【高级定时器TIM1:掌握时间,节省资源】

发表评论