本文作者:Miler Shao 凡接触过STM32芯片的人可能发现,STM32芯片内的定时器外设往往很多,其中不少定时器可以内部连接建立起主从关系,从而实现定时器间的时钟同步或前后级联操作。被配置为主模式定时器可以复位、启停从模式定时器或为从定时器提供时钟源。 在STM32 各系列的参考手册里对各个定时器都有很详细而庞大的描述,不过经常会有人在这里遇到点障碍。我们不妨以一个问题入手。 STMCU社区网站有人咨询如下话题: 我在使用STM32F407芯片,想用TIM10作为主定时器输出给TIM9,TIM10作为TIM9的计数时钟。但是我在TIM10寄存器中没有找到相应的寄存器设置。比如当把TIM2作为主定时器的时候,可以在定时器的TIM2_CR2寄存器下的MMS[2:0]位设置通道几作为内部互联输出。TIM11也找不到这样的寄存器,请问定时器11应该怎么配置成内部互连输出。谢谢。 咨询者大致意思是说想把TIM10做MASTER,并为TIM9提供时钟。但找不到关于TIM10的主从模式的配置寄存器。TIM11也找不到相应寄存器。 如果一个TIMER能配置为MASTER模式,就得有触发输出端,即TRGO;如果某TIMER能配置为SLAVE模式, 自然得有内部触发输入端,即ITRn[n=0~3]。这样通过把前一级TIMER的TRGO内部连接到下一级TIMER的ITRn,形成主从级联关系。 下面截图是STM32高级定时器功能框图的一部分,不难看出,它既可作MASTER也可作SLAVE。 现在我们去STM32F4系列的参考手册RM0090找找咨询者提到过的TIM2 、TIM10、 TIM11 的功能框图。
显然,TIM2支持主、从模式配置。 继续看看TIM10 TIM11的框图。 从TIM10/11/13/14的功能框图能一眼看出它们根本不支持定时器间的内部主从级联,既不能做MASTER也不能做SLAVE。自然也就没有相关的配置寄存器。
到这里,咨询者的答案也就基本出来了。我们顺便再多看一幅框图:
上图是STM32F4系列芯片里TIM9和TIM12的功能框图部分,可以看出这两个TIMER跟前面提到的TIM10/TIM11 又不一样,可以配置为SLAVE模式,但不能配置为MASTER模式,因为它没有TRGO输出端。 总体上讲,STM32芯片里定时器较多,往往根据功能特征分为几类。各类TIMER功能上会有差异,这点要注意。 继续回到上面的话题,即使某TIMER支持主从模式的功能,但在跟它建立主从关系的定时器选择上并非随心所欲的,不是说你想跟谁联就跟谁联,想接哪个通道就可以接哪个通道,而是要遵照相关的约定。我们以上面的TIM2 为例来看下。 从上图可以看出,如果TIM2工作在slave模式,就只有TIM1/8/3/4之一可以与之构成主从关系,而且ITRn 也有规定,比方TIM1的TRGO 就只能从TIM2的ITR0进。如果TIM2做MASTER时,只有TIM3/4/5可以配合做它的SLAVE。 小结下: 1、不是所有定时器都支持定时器内部主从互联。其中部分完全不支持内部主、从互联;有的只支持从模式下的互联; 2、即使支持TIMER的互联模式,但互联的定时器及相关通道也是有相关约定的。 |