一、 框图
让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器的信息,您要是能看明白,那么接下来就不用再看别的了…
为了方便的看图,我对里面出现的名词和符号做个注解:
TIMx_ETR:TIMER外部触发引脚 ETR:外部触发输入
ETRP:分频后的外部触发输入 ETRF:滤波后的外部触发输入
ITRx:内部触发x(由另外的定时器触发)
TI1F_ED:TI1的边沿检测器。
TI1FP1/2:滤波后定时器1/2的输入
TRGI:触发输入 TRGO:触发输出
CK_PSC:应该叫分频器时钟输入
CK_CNT:定时器时钟。(定时周期的计算就靠它)
TIMx_CHx:TIMER的输入脚 TIx:应该叫做定时器输入信号x
ICx:输入比较x ICxPS:分频后的ICx
OCx:输出捕获x OCxREF:输出参考信号
TI1 TI2 TI3 TI4:这个信号就是外部信号,是直接与管脚相连的信号,图中还有一个问题就是TI1是可以是第一通道的外部信号进行触发,也可以设置为,第一通道,第二通道,第三通道异或进行触发。外部信号送往滤波器和边沿检测器。
TIxFP触发有效信号。
TI1FP1 TI1FP2 TI2FP1 TI2FP2 TI3FP3 TI3FP4 TI4FP3 TI4FP4:这个就是一个触发有效信号,由于与管脚直连的信号可以被设置为高低边沿触发,所以通过设置后,TIxFP就是对应这个信号是否有效的标致。
ICx映射信号
IC1 IC2 IC3 IC4:通道有效信号,在他的前面是TIxFP和TRC信号,可以看出,TI1FP与TI2FP可以互相对应IC1和IC2,TI3FP和TI4FP可以互相对应IC3和IC4,这样的话,就可以使一个TIxFP信号对应两个ICx也就是对应两个通道。这样的话,就可以实现PWM输入了,可以由1个来计算周期,另一个来计算占空比。ICx信号被送入预分频器
通道中断和DMA输出信号
CC1I CC2I CC3I CC4I:ICx信号经过预分频器后即可通过配置产生中断或DMA输出。
预分频计数信号
IC1PS IC2PS IC3PS IC4PS::ICx信号经过预分频器后即可以进入CCRx计数寄存器了,此时可配合中断对CCR读取。
OC1REF输出有效信号
OC1REF OC2REF OC3REF OC4REF:当比较输出或PWM输出时第一个输出的信号。这个信号经过配置高低电平,才能变成输出到管脚
的有效电平的。
比较输出PWM输出电平
OC1 OC1N OC2 OC2N OC3 OC3N OC4:输出到管脚的信号
刹车输入管脚信号
BRK刹车输入管脚信号,引脚输入后进入极性选择。
刹车信号
BI:刹车信号,通过极性选择的信号与时钟失效信号相或后,得出刹车有效信号。来驱动刹车。
更新时间
u更新事件信号,由软件事件寄存器或计数器溢出产生。
事件更新中断
UI:事件更新中断信号
外部ETR触发脚信号
ETR:与外部管脚相连的触发定时器专用触发脚
边沿预分频后ETR信号
ETRP:边沿预分频后ETR信号
经过滤波后的ETR有效信号
ETRF:ETRP经过滤波,极性,边沿后的有效信号
内部触发ITRx通道信号
ITR0 ITR1 ITR2 ITR3 :触发可由内部其他定时器产生信号,且定时器1和定时器8的定时器触发不同。在数据手册中的定时器章表74有体现
ITR触发信号
ITRx经过设置,产生触发信号。进入下一个环节。
TI1的边沿检测器
TI1F_ED:TI1的边沿检信号,在霍尔传感器模式下,会检测TI1的变化,从输入是TI1F_ED。每当3个输入之一变化时,计数器从新从0开始计数。这样产生一个由霍尔输入端的任何变化而触发的时间基准。
TRC:通过选择器选择TI1边沿与内部触发后,发出的触发信号。
TRGI:最终的触发输入。
TGI:触发输入中断位
TRGO:触发输出。作为主模式去发出控制其他定时器的触发信号,应该与其他定时器的ITRx相连
三、时钟源的选择
这个是难点之一。从手册上我们看到共有三种时钟源:
1、 内部时钟。
也就是选择CK_INT做时钟,这个简单,但是有一点要注意,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当 APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。
例如AHP 72M,APB12分频36M,那么TIMER就是APB1的2倍频,即72M。
怎么选择时钟模式1呢?只要将SMCR中SMS[2:0]弄成000就好了
SMCR
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ETP |
ECE |
ETPS[1:0] |
ETF[3:0] |
MSM |
TS[2:0] |
|
SMS[2:0] |
2、 外部时钟模式1
这个比较麻烦,时钟源选择的其实就是TRGI(触发输入),但触发输入选择挺多的,共8个……。看框图,他们是:ITRx、TI1F_ED、
TI1FP1、TI2FP2、ETRF
ITRx的东西跟定时器的级联有关,暂时不管他。要进入这种时钟模式首先置SMS为111,当然这还没完,不像内部时钟那样,什么都配好了,这里你还得配置一下别的参数,比如选择TI1FP1,自然要对输入通道1的参数配置好,这样时钟才能按你需要的方式进来。就是配框图这块
相关寄存器
CCMR1(输入)
IC2F[3:0] |
IC2PSC[1:0] |
CC2S[1:0] |
IC1F[3:0] |
IC1PSC[1:0] |
CC1S[1:0] |
CCER
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
CC4P |
CC4E |
|
|
CC3P |
CC3E |
|
|
CC2P |
CC2E |
|
|
CC1P |
CC1E |
SMCR
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ETP |
ECE |
ETPS[1:0] |
ETF[3:0] |
MSM |
TS[2:0] |
|
SMS[2:0] |
在CCMR1寄存器里选择好相应的输入(CC1S)和滤波(IC1F)后再配置好输入极性(CCIP)然后在SMCR中选择触发源(TS[2:0])为TI1这样输入通道就配好了!最后选择SMS为111,开启时钟(CR1中的CEN)。现在时钟就是从TI1上的输入了,可以接个时钟源进行计数之类的。同理,如果要用ETR就把它相关通道配好就可以了。
3、 外部时钟模式2
选择外部输入作为时钟,看框图:
从图上可以看出ETR可以直接作为时钟输入也可以通过触发输入(TRGI)来作为时钟输入即在时钟模式1中触发源选择为ETR,两个效果上是一样的,看起来好像这个外部时钟模式2没什么用处,实际上不是的,他可以跟一些从模式(复位、触发、门控)进行组合。比如当从模式选为触发时,我们不可能再通过触发源选择ETR了,因为从模式控制器被占了,好在有外部时钟模式2,我们选择这种模式后就可以把两者组合在一起完成一些功能了。
总结一下,STM32的时钟选择比较特别,在SFR中关于时钟选择配置位不再一块,不是说两个位在一起00、01、11就选择了而是由
SMCR中SMS和ECE 来控制,这样感觉可以吧内部时钟与外部模式2同时打开(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同时打开(SMS:111,ECE:1),实际上上述两种方式用的都是外部时钟2.
四、捕获比较通道
这就是我说的定时器三个组成部分中的两个部分了。核心是那个捕获比较寄存器。
看框图
异或那块先不管他,好像跟编码器有关,输入有个特色就是可以把TI的输入搞到CC1上去,也可以把T2的输入搞到CC1上去,其实也可以把T1搞到CC1上去同时把T1搞到CC2上去,这样就有了后来的PWM输入。
输出上的特色是不直接输出,而是有个OC1REF,这样可以定义高有效还是低有效,输出自己需要的有效电平。
复位 门控 触发
所谓从模式简单理解就是受控于别人了,包括何时启动、何时停止、何时复位。相关作用请看手册。提示一点就是进入这三种模式后时钟是谁的问题?肯定不是外部时钟1了,可以是内部时钟和外部时钟2.
接着看实验,PWM方式的原理是这样的,如前文提到过输入时可以把T1映射到CC1上去同时映射到CC2上,将CC1和CC2的捕获边沿搞成相反的,比如CC1捕获T1上升沿,CC2捕获T1下降沿,还要再设置T1为复位从模式,上升沿有效,这样T1上升沿后计数器开始计数。下降沿CC2捕获发生,此为PWM占空比,在来一个上升沿,CC1捕获发生此为PWM周期。注意CC1捕获的第一次无效。
这是从模式跟输入捕获的一种组合使用,从模式还可以跟输出比较组合使用。比如手册上的单脉冲实验。
先得说说主模式的问题。在CR2寄存器中的MMS位决定了定时器的主模式方式,即决定TRGO.几种方式可以参看手册。要说明一点就是一个定期器既可以是主模式同时它也是从模式,这就好像你是一个中层干部一样,既可以领导别人同时又被别人领导,这个不冲突的。