STM32_定时器


原文链接: STM32_定时器

最近做项目,用到定时器,索性重新学习一下,以前只是用于简单的pwm生成和中断处理,对定时器根本就没有进行深入研究,今天借此机会,重新学习一下高级定时器,只要高级定时器学会了,基本定时器也就没什么问题了。总体上来说,stm32的定时器,功能非常多。看了一下,大概有20个功能。我就按照数据手册,一一的重新学习一下。

首先是框图,娘的,看着就眼晕

1、时基:包含计数器寄存器(TIMx_CNT) 预分频器寄存器 (TIMx_PSC) 自动装载寄存器 (TIMx_ARR) 重复次数寄存器 (TIMx_RCR)

 计数类似于51单片机中的TH1和TL1。预分频器就是将输入时钟进行降低。重复寄存器类似与51中的自动装载模式中的TH寄存器。最后一个寄存器与产生更新时间UEV与影子寄存器有关。UEV时间更新,对于预分频寄存器来说,他可以看成两个寄存器,一个叫可读写的,一个叫缓冲的,预分频是根据缓冲为标准的,设置的时候,将数据写入可读写,然后等待UEV时间的到来,在将可读写的写入缓冲来更新。这就是UEV的作用。影子寄存器主要是防止多通道时序错误的问题。

有兴趣的可以看一下 http://blog.163.com/liuyunqian@yeah/blog/static/70395843201043094819579/

2、计数器模式:

向上,向下,上下计数

 向上计数从0开始,到TIMx_APR,产生溢出,溢出时产生UEV,然后更新影子寄存器。若设置了TIMx_RCR,则到TIMx_RCR时即产生UEV。否则只能到溢出时产生UEV。
 向下计数从TIMx_APR递减到0,产生溢出,对于UEV和上面类似
 中央对齐模式:从0递增到TIMx_APR-1,产生溢出,然后在递减到0,产生下溢。有1、2、3,三种模式,其中2、3和UIF有关

3、重复计数器:

产生UEV。对PWM和输入捕获很有用处。

4、时钟源:

1、内部时钟。
2、外部时钟模式1:外部输入引脚 外部时钟模式2:外部触发输入ETR
3、内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

5、捕获比较通道:

主要多用于计频和pwm输出。t1和t8高级定时器通道中含有死区控制,使用时可设置。
对于时间测量:一个方法是测频率,另一个是测周期,测频率在限定的时间内(如1秒钟)检测脉冲的个数,测周期测试限定的脉冲个数之间的时间。
考虑的问题:
(1)、系统时钟:频率与精度,(2)、计数器位数,一般为16位,可以产生的限定时间越长,或在限定时间里记录的脉冲个数越多。(3)、被测频率的范围,低频检测两个脉冲时间,高频在一定时间内检测脉冲个数。(4)、中断响应与软件算法。

6、输入捕获模式:

(1)配置TIMx的CCRx为输入模式,即TIMx->CCMRx的0和1位为 "0x01" "0x02" 或"0x03"。(2)配置输入滤波器,即TIMx->CCMRx的4-7位或15-12位。(3)配置通道的有效转换边沿,即TIMx->CCER的"1","5","9","13"位,0为上升沿,1为下降沿。(4)配置预分频器,TIMx->CCMRx的第2-3位或第11-10位。(5)设置TIMx->CCER的"0","4","8","12"位(6)设置TIMx->DIER的中断允许位。
对于输入捕获,应该是在中断中进行处理。 可以计算高低电平的时间,同时也可以针对红外解码进行编程配置。
当检测到捕获后进入中断开始处理。也可进入dma,或读取CCRx。

7,PWM输入:

对于PWM输入,主要是测频率与测占空比。配置时,把1个引脚触发映射到两个CCRx中去,同时,将两个CCR配置成为边沿极性相反输入,这样的话,可以一个用来计频率,另一用来计占空比。当频率边沿跳变时,记录周期与占空比后,计数器清零,然后计算具体数据。

8,强置输出模式:

通过设置CCMR寄存器,可以使OCxREF强制为高或低一种状态。且计数器和比较器仍在工作,并产生中断或DMA。

9,输出比较模式

图片

10,PWM模式:

TIMx_ARR决定周期周期,CCRx决定占空比。cnt计数到CCRx时,跳变电平。4路的占空比,可以独立设置。

11,单脉冲模式:

从模式启动,在 输出比较 或者 PWM 下产生波形。

12,在外部事件时清除OCxREF信号,外加比较器,可用于控制电流。

例|:外部触发预分频器必须处于关闭,必须禁止外部时钟模式2:TIMx_SMCR寄存器中的ECE=’0’。外部触发极性(ETP)和外部触发滤波器(ETF)可以根据需要配置。

13,编码器接口模式:

用于编码器的脉冲和相位测量,在第一通道和第二通道中设置。对于编码器而言,有A、B两相相差90度,可通过比较A相在前还是B相在前,以判别编码器的正转与反转,通过零位脉冲,可获得编码器的零位参考位。并且可以测量两个编码器事件的间隔,获得动态的信息(速度,加速度,减速度)等。
我们假定配置如下: ● CC1S=’01’ (TIMx_CCMR1寄存器,IC1FP1映射到TI1) ● CC2S=’01’ (TIMx_CCMR2寄存器,IC2FP2映射到TI2) ● CC1P=’0’ (TIMx_CCER寄存器,IC1FP1不反相,IC1FP1=TI1) ● CC2P=’0’ (TIMx_CCER寄存器,IC2FP2不反相,IC2FP2=TI2) ● SMS=’011’ (TIMx_SMCR寄存器,所有的输入均在上升沿和下降沿有效). ● CEN=’1’ (TIMx_CR1寄存器,计数器使能)

14,定时器输入异或功能

TIMx_CR2寄存器中的TI1S位,允许通道1的输入滤波器连接到一个异或门的输出端,异或门的3个输入端为TIMx_CH1、TIMx_CH2和TIMx_CH3。 13.3.18异或输出能够被用于所有定时器的输入功能,如触发或输入捕获。下节给出了此特性用于连接霍尔传感器的例子。

15,霍尔传感器

定时器输入异或的应用,用于电机的测速。他可以映射到通用定时器,T2-T5,用T1或T8来控制电机。

16,TIMx定时器和外部触发的同步

TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。
复位模式:能在外部触发时,使计数器复位。
门控模式:按照选中的输入端电平使能计数器。
触发模式:输入端上选中的事件使能计数器
外部时钟模式2可以与另一种从模式(外部时钟模式1和编码器模式除外)一起使用。这时,ETR信号被用作外部时钟的输入,在复位模式、门控模式或触发模式可以选择另一个输入作为触发输入。不建议使用TIMx_SMCR寄存器的TS位选择ETR作为TRGI。

17:定时器同步

使一个定时器作为另一个定时器的预分频器。使用一个定时器使能另一个定时器(如:定时器2的使能由定时器1的输出比较控制)使用一个定时器去启动另一个定时器。使用一个外部触发同步地启动2个定时器。

18:调试模式,具体就不去讨论了。

总体上来说,STM32的定时器功能非常多,也非常复杂,加入了电机控制的一些功能。初步的大概也就这意思。至于如何使用,还要在项目中细细研究。

`