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的时钟。
从模式选择位
- 000禁止从模式:选择内部时钟,直接提供时钟到时基部分,无法开启触发功能。
- 100复位模式:所选触发输入(外部时钟输入)上升或下降时,reset时基部分的计数器。
- 101门控模式:高电平或低电平使能时基部分的计数器,反向电平停止计数。
- 110触发模式:上升沿或下降沿启动计数器。
- 另外外部时钟也可选择不使用触发的模式。
作用:
使能输出TRGI(Trigger Input)
控制器的作用:
- 提供Trigger Output。
- 提供Trigger Input。
- 选择时钟。
注:
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的值。
Center:CNT从0开始++计数,等于ARR-1时,产生更新事件,CNT此时等于ARR-1,从该值- -计数,等于0时,产生更新事件。
5. 输入捕获部分
OK,以上的基础部分讲解完毕,下面就是重要的功能部分了。
作用:
测量输入信号的周期。
测量输入PWM信号的占空比/周期。
工作原理:
当捕获到信号的跳变沿(上升/下降/双沿)时,把CNT的值锁存到CCR中,产生更新事件(中断/DMA)。
测量原理(以下为软件操作):
每次产生更新事件(中断/DMA),在处理函数中(中断/DMA)读取CCR的值并保存,将上次捕获的CCR值与本次相减,结果可计算脉宽或周期。
注:
当设置单沿捕获时,结果可计算周期。
当设置双沿捕获时,结果可计算周期/脉宽,但是无法知道脉宽是高电平的,还是低电平的,因为无法具体判断是上升还是下降触发的。
整体框图如下:
如图,一个输入信号通道可以占用两个捕获通道(IC1和IC2),TI1FP1可以给IC1,TI1FP2可以给IC2,因此可以用该方法测量输入PWM的占空比及周期。
测量PWM输入的占空比及周期:
CH1做为输入通道,IC1捕获上升沿,IC2捕获下降沿。
与普通方法比较:
- 普通方法该过程需要产生两个中断,该方法仅需要产生一个中断。就是说,PWM输入捕获模式,其实就是用了两个寄存器来分别捕获上升沿、下降沿触发时的CNT的值了,看上图可知,TI1刚上升时,IC1和IC2复位(或者IC1捕获CNT的值,这里其实是配置成了触发复位的方式),也可以理解为,TI1刚上升时,IC1捕获CNT的值,TI1下降沿时,IC2捕获CNT的值,此时可以让IC2不产生中断,只让IC1产生中断,(因为下个触发是IC1,所以IC2的值不会变化,这样就不影响)这样就能少一个中断的产生。
- 普通方法测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,捕获到目标信号后,不产生中断。
- 更新事件(CNT上/下溢出)
- 捕获(输入捕获时,捕获到目标信号)
- 比较(输出比较时,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的说明书部分,应该会清晰很多。