General-purpose timers (TIM2 to TIM5)

通用定时器主要由以下几种用途:

  1. 输入捕获:测量输入信号的脉冲长度
  2. 输出比较
  3. PWM输出
  4. 单脉冲模式输出

通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:

● 16-bit auto-reload counter(自动重装载计数器);计数器共有种计数模式: up mode, up/down mode
● 16位可编程( 可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536 之间的任意数值
● 4个独立通道: 
– Input capture输入捕获
– Output compare输出比较
– PWM generation (Edge- and Center-aligned modes)PWM生成(边缘或中间对齐模式)
– One-pulse mode output单脉冲模式输出
●  使用外部信号控制定时器和定时器互连的同步电路
●  如下事件发生时产生中断/DMA :
– Update(更新): counter overflow/underflow, counter initialization (by software or internal/external trigger)
– Trigger event (触发事件)(counter start, stop, initialization or count by internal/external trigger)
– Input capture(输入捕获)
– Output compare(输出比较)

●  支持针对定位的增量(正交)编码器和霍尔传感器电路
●  Trigger input(触发输入) for external clock  or cycle-by-cycle current management

STM32的TIM主要包括三大模块:

1、时钟源
2、时基单元
3、捕获/比较单元

时钟源(定时器定时计数就靠它了)The counter clock can be provided by the following clock sources:

● Internal clock (CK_INT)
● External clock mode1: external input pin (TIx)
● External clock mode2: external trigger input (ETR)
● Internal trigger inputs (ITRx): using one timer as prescaler for another timer(使用一个定时器作为另一个定时器的预分频器)

时基单元:The time-base unit includes:

● Counter Register (TIMx_CNT)
● Prescaler Register (TIMx_PSC):
● Auto-Reload Register (TIMx_ARR) 物理上包括preload register 和 shadow register两个寄存器

UEV:Update event
UDIS:Update disable
CK_CNT:Counter clock

Autoreload register(自动装载寄存器):Autoreload register在物理上对应预装载寄存器影子寄存器这两个寄存器(preload register + shadow register)。根据TIMx_CR1寄存器中APRE位的设置,preload register的内容可以随时传送到shadow register,即两者是连通的(permanently);或者在每一次更新事件(UEV)时,才把preload register的内容传送到shadow register。

CNT counter(计数器):The counter is clocked by the prescaler output CK_CNT。

PSC Prescaler(预分频器):The prescaler can divide the counter clock frequency by any factor between 1 and 65536。PSC也有个预装载功能,却不像auto-reload register (ARR)和capture/compare register(CCR)那样有相关的位控制位ARPR(Auto-reload preload enable)和OCxPE(Output compare x preload enable),可以控制立即装载或更新事件装载。

也就是说PSC只能通过更新事件来装载。

/* Set the Prescaler value */
TIMx->PSC = Prescaler;
/* Set or reset the UG Bit -- 更新事件*/
TIMx->EGR = TIM_PSCReloadMode;

使用库函数来代替以上两句:(其实以上两句正是库函数所调用的内容)

TIM_PrescalerConfig(TIM2, PrescalerValue, TIM_PSCReloadMode_Immediate);

捕获/比较单元

Each Capture/Compare channel is built around a capture/compare register (including a shadow register), a input stage for capture (with digital filter, multiplexing and prescaler) and an output stage (with comparator and output control)。每个定时器TIMx(每个capture/compare模块)都有四个独立的通道TIM channel(TIMx_CHx)每个TIMx_CHx既可以配置为输入通道(TIx)也可配置为输出通道(OCx),
这取决与TIMx_CCMR1寄存器的CCxS位。从左图中可以看到,capture/compare x register以及其左半部分构成输入模块,capture/compare x register以及其右半部分构成输出模块;TIx和OCx共同连接在芯片引脚TIMx_CHx上,即触发输入通道x和输出比较通道x共用同芯片的同一个引脚。

 

例:根据datasheet可知,定时器TIM2的通道4即TIM2_CH4是PA3的Alternate functions即PA3既可以作为TIM2的TI4;也可以作为TIM2的OC4。这取决与CCxS位。

posted @ 2013-05-10 20:38  此岸幸福  阅读(1356)  评论(0编辑  收藏  举报