定时器同步

目录

使用一个定时器作为另一个定时器的预分频器

使用一个定时器使能另一个定时器

使用一个定时器去启动另一个定时器

使用一个外部触发同步地启动2个定时器

涉及寄存器参考

控制寄存器 1(TIMx_CR1)

控制寄存器 2(TIMx_CR2)

从模式控制寄存器(TIMx_SMCR)

捕获/比较模式寄存器 1(TIMx_CCMR1)

事件产生寄存器(TIMx_EGR)

计数器(TIMx_CNT)

自动重装载寄存器(TIMx_ARR)


为了方便阅读,本文涉及到的寄存器位在文后已做黄色标注。

定时器与外部触发同步请看:http://t.csdn.cn/SQerE


TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。

图1 定时器框图

在STM32中,所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对另一个处于从模式的定时器的计数器进行复位、启动、停止或提供时钟等操作。

使用一个定时器作为另一个定时器的预分频器

图2 主/从定时器的例子

 如:可以配置定时器1作为定时器2的预分频器。参考图2,进行下述操作:

        ● 配置定时器1为主模式,它可以在每一个更新事件UEV时输出一个周期性的触发信号。在 TIM1_CR2寄存器的MMS=’010’时,每当产生一个更新事件时在TRGO1上输出一个上升沿信号。

笔记:配置定时器1,让每周期产生一个脉冲,从TRGO1输出。

        ● 连接定时器1的TRGO1输出至定时器2,设置TIM2_SMCR寄存器的TS=’000’,配置定时器2 为使用ITR1作为内部触发的从模式。

笔记:将定时器1产生的脉冲信号连接到定时器2的内部触发接口,作为定时器2的时钟。

        ● 然后把从模式控制器置于外部时钟模式1(TIM2_SMCR寄存器的SMS=111);这样定时器2 即可由定时器1周期性的上升沿(即定时器1的计数器溢出)信号驱动。

笔记:设置定时器2的从模式,让其上升沿才计数(即有一个上升沿,计数器计数一次)。

        ● 最后, 必须设置相应(TIMx_CR1寄存器)的CEN位分别启动两个定时器。

注: 如果OCx已被选中为定时器1的触发输出(MMS=1xx),它的上升沿用于驱动定时器2的计数器。

笔记:上面的例子是从定时器1的TRGO1输出脉冲,注解中说的是用比较输出的接口OCx输出脉冲,具体见图1定时器框图。

使用一个定时器使能另一个定时器

在这个例子中,定时器2的使能由定时器1的输出比较控制。参考图2的连接。

只当定时器1的 OC1REF为高时,定时器2才对分频后的内部时钟计数。两个定时器的时钟频率都是由预分频器 对CK_INT除以3(fCK_CNT=fCK_INT/3)得到。

        ● 配置定时器1为主模式,送出它的输出比较参考信号(OC1REF)为触发输出(TIM1_CR2寄存 器的MMS=100)

笔记:让定时器1从OC1REF输出信号。

        ● 配置定时器1的OC1REF波形(TIM1_CCMR1寄存器)

        ● 配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)

笔记:定时器2选择内部触发,即将定时器1产生的信号从ITR0接入。

        ● 配置定时器2为门控模式(TIM2_SMCR寄存器的SMS=101)

笔记:输入为高电平,那么计数器计数;输入为低电平,计数器停止计数。

        ● 置TIM2_CR1寄存器的CEN=1以使能定时器2

        ● 置TIM1_CR1寄存器的CEN=1以启动定时器1

注: 定时器2的时钟不与定时器1的时钟同步,这个模式只影响定时器2计数器的使能信号。

图3  定时器1的OC1REF控制定时器2

在图3的例子中,在定时器2启动之前,它们的计数器和预分频器未被初始化,因此它们从当前的数值开始计数。可以在启动定时器1之前复位2个定时器,使它们从给定的数值开始,即在定时器计数器中写入需要的任意数值。写TIMx_EGR寄存器的UG位即可复位定时器。

在下一个例子中,需要同步定时器1和定时器2。定时器1是主模式并从0开始,定时器2是从模式并从0xE7开始;2个定时器的预分频器系数相同。写’0’到TIM1_CR1的CEN位将禁止定时器1,定时器2随即停止。

        ● 配置定时器1为主模式,送出输出比较1参考信号(OC1REF)做为触发输出(TIM1_CR2寄存 器的MMS=100)。

笔记:让定时器1从OC1REF输出信号。

        ● 配置定时器1的OC1REF波形(TIM1_CCMR1寄存器)。

        ● 配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)

笔记:定时器2选择内部触发,即将定时器1产生的信号从ITR0接入。

        ● 配置定时器2为门控模式(TIM2_SMCR寄存器的SMS=101)

笔记:输入为高电平,那么计数器计数;输入为低电平,计数器停止计数。

        ● 置TIM1_EGR寄存器的UG=’1’,复位定时器1。

        ● 置TIM2_EGR寄存器的UG=’1’,复位定时器2。

笔记:使两个定时器的计数器值都复位成0,即从0开始计数。

        ● 写’0xE7’至定时器2的计数器(TIM2_CNTL),初始化它为0xE7。

笔记:让定时器2从0xE7计数。

        ● 置TIM2_CR1寄存器的CEN=’1’以使能定时器2。

        ● 置TIM1_CR1寄存器的CEN=’1’以启动定时器1。

        ● 置TIM1_CR1寄存器的CEN=’0’以停止定时器1。

图4  通过使能定时器1可以控制定时器2

使用一个定时器去启动另一个定时器

在这个例子中,使用定时器 1 的更新事件使能定时器2。参考图2的连接。一旦定时器 1 产生更新事件,定时器2即从它当前的数值(可以是非0)按照分频的内部时钟开始计数。在收到触发信号时,定时器2的CEN位被自动地置’1’,同时计数器开始计数直到写’0’到TIM2_CR1寄存器的CEN 位。两个定时器的时钟频率都是由预分频器对CK_INT除以3(fCK_CNT=fCK_INT/3)。

        ● 配置定时器1为主模式,送出它的更新事件(UEV)为触发输出(TIM1_CR2寄存器的MMS=010) 。

笔记:配置定时器1,让每周期产生一个脉冲,从TRGO1输出。

        ● 配置定时器1的周期(TIM1_ARR寄存器)。

        ● 配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)

笔记:定时器2选择内部触发,即将定时器1产生的信号从ITR0接入。

        ● 配置定时器2为触发模式(TIM2_SMCR寄存器的SMS=110)

笔记:让定时器2收到上升沿时开启。

        ● 置TIM1_CR1寄存器的CEN=1以启动定时器1。

图5  使用定时器1的更新触发定时器2

在上一个例子中,可以在启动计数之前初始化两个计数器。 图6显示在相同配置情况下,使用触发模式而不是门控模式(TIM2_SMCR寄存器的SMS=110)的动作。

图6  使用定时器1的使能触发定时器2

使用一个外部触发同步地启动2个定时器

这个例子中当定时器1的TI1输入上升时使能定时器1,使能定时器1的同时使能定时器2,参见图 2。为保证计数器的对齐,定时器1必须配置为主/从模式(对应TI1为从,对应定时器2为主):

        ● 配置定时器1为主模式,送出它的使能做为触发输出(TIM1_CR2寄存器的MMS=’001’)。

        ● 配置定时器1为从模式,从TI1获得输入触发(TIM1_SMCR寄存器的TS=’100’)。

笔记:在定时器1的TI1接一个外部的触发信号。

        ● 配置定时器1为触发模式(TIM1_SMCR寄存器的SMS=’110’)。

笔记:让定时器1收到上升沿时开启。

        ● 配置定时器1为主/从模式,TIM1_SMCR寄存器的MSM=’1’。

        ● 配置定时器2从定时器1获得输入触发(TIM2_SMCR寄存器的TS=000)

        ● 配置定时器2为触发模式(TIM2_SMCR寄存器的SMS=’110’)。

笔记:让定时器2收到上升沿时开启。

当定时器1的TI1上出现一个上升沿时,两个定时器同步地按照内部时钟开始计数,两个TIF标志 也同时被设置。

注: 在这个例子中,在启动之前两个定时器都被初始化(设置相应的UG位),两个计数器都从0开始, 但可以通过写入任意一个计数器寄存器(TIMx_CNT)在定时器间插入一个偏移。下图中能看到主/ 从模式下在定时器1的CNT_EN和CK_PSC之间有个延迟。

图7  使用定时器1的TI1输入触发定时器1和定时器2

涉及寄存器参考

 控制寄存器 1(TIMx_CR1)

偏移地址:0x00

复位值:0x0000

位15:10保留,始终读为0。
位9:8

CKD[1:0]: 时钟分频因子 (Clock division)

定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。

00:tDTS = tCK_INT

01:tDTS = 2 x tCK_INT

10:tDTS = 4 x tCK_INT

11:保留

位7

ARPE:自动重装载预装载允许位 (Auto-reload preload enable)

0:TIMx_ARR寄存器没有缓冲;

1:TIMx_ARR寄存器被装入缓冲器。

位6:5

CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection)

00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。

01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。

10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。

11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器 中CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。

注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。

位4

DIR:方向 (Direction)

0:计数器向上计数;

1:计数器向下计数。

注:当计数器配置为中央对齐模式或编码器模式时,该位为只读。

位3

OPM:单脉冲模式 (One pulse mode)

0:在发生更新事件时,计数器不停止;

1:在发生下一次更新事件(清除CEN位)时,计数器停止。

位2

URS:更新请求源 (Update request source)

软件通过该位选择UEV事件的源

0:如果使能了更新中断或DMA请求,则下述任一事件产生更新中断或DMA请求:

        − 计数器溢出/下溢

        − 设置UG位

        − 从模式控制器产生的更新

1:如果使能了更新中断或DMA请求,则只有计数器溢出/下溢才产生更新中断或DMA请求。

位1

UDIS:禁止更新 (Update disable)

软件通过该位允许/禁止UEV事件的产生

0:允许UEV。更新(UEV)事件由下述任一事件产生:

        − 计数器溢出/下溢

        − 设置UG位

        − 从模式控制器产生的更新具有缓存的寄存器被装入它们的预装载值。(译注:更新影子寄存器)

1:禁止UEV。不产生更新事件,影子寄存器(ARR、PSC、CCRx)保持它们的值。如果设置了 UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。

位0

CEN:使能计数器

0:禁止计数器;

1:使能计数器。

注:在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。

触发模式可以自动地通过硬件设置CEN位。 在单脉冲模式下,当发生更新事件时,CEN被自动清除。

控制寄存器 2(TIMx_CR2)

偏移地址:0x04

复位值:0x0000

位15:8保留,始终读为0。
位7

TI1S:TI1选择 (TI1 selection)

0:TIMx_CH1引脚连到TI1输入;

1:TIMx_CH1、TIMx_CH2和TIMx_CH3引脚经异或后连到TI1输入。

位6:4

MMS[2:0]:主模式选择 (Master mode selection)

这3位用于选择在主模式下送到从定时器的同步信息(TRGO)。可能的组合如下:

000:复位 – TIMx_EGR寄存器的UG位被用于作为触发输出(TRGO)。如果是触发输入产生的 复位(从模式控制器处于复位模式),则TRGO上的信号相对实际的复位会有一个延迟。

001:使能 – 计数器使能信号CNT_EN被用于作为触发输出(TRGO)。有时需要在同一时间启动 多个定时器或控制在一段时间内使能从定时器。计数器使能信号是通过CEN控制位和门控模式 下的触发输入信号的逻辑或产生。 当计数器使能信号受控于触发输入时,TRGO上会有一个延迟,除非选择了主/从模式(见 TIMx_SMCR寄存器中MSM位的描述)。

010:更新 – 更新事件被选为触发输入(TRGO)。例如,一个主定时器的时钟可以被用作一个从 定时器的预分频器。

011:比较脉冲 – 在发生一次捕获或一次比较成功时,当要设置CC1IF标志时(即使它已经为 高),触发输出送出一个正脉冲(TRGO)。

100:比较 – OC1REF信号被用于作为触发输出(TRGO)。

101:比较 – OC2REF信号被用于作为触发输出(TRGO)。

110:比较 – OC3REF信号被用于作为触发输出(TRGO)。

111:比较 – OC4REF信号被用于作为触发输出(TRGO)。

位3

CCDS:捕获/比较的DMA选择

0:当发生CCx事件时,送出CCx的DMA请求;

1:当发生更新事件时,送出CCx的DMA请求。

位2:0保留,始终读为0。

从模式控制寄存器(TIMx_SMCR)

偏移地址:0x08

复位值:0x0000

位15

ETP:外部触发极性 (External trigger polarity)

该位选择是用ETR还是ETR的反相来作为触发操作

0:ETR不反相,高电平或上升沿有效;

1:ETR被反相,低电平或下降沿有效。

位14

ECE:外部时钟使能位 (External clock enable)

该位启用外部时钟模式2

0:禁止外部时钟模式2;

1:使能外部时钟模式2。计数器由ETRF信号上的任意有效边沿驱动。

注1:设置ECE位与选择外部时钟模式1并将TRGI连到ETRF(SMS=111和TS=111)具有相同功 效。

注2:下述从模式可以与外部时钟模式2同时使用:复位模式、门控模式和触发模式;但是,这 时TRGI不能连到ETRF(TS位不能是’111’)。

注3:外部时钟模式1和外部时钟模式2同时被使能时,外部时钟的输入是ETRF。

位13:12

ETPS[1:0]:外部触发预分频 (External trigger prescaler)

外部触发信号ETRP的频率必须最多是CK_INT频率的1/4。当输入较快的外部时钟时,可以使 用预分频降低ETRP的频率。

00:关闭预分频;

01:ETRP频率除以2;

10:ETRP频率除以4;

11:ETRP频率除以8。

位11:8

ETF[3:0]:外部触发滤波 (External trigger filter)

这些位定义了对ETRP信号采样的频率和对ETRP数字滤波的带宽。实际上,数字滤波器是一个 事件计数器,它记录到N个事件后会产生一个输出的跳变。

0000:无滤波器,以fDTS采样                            1000:采样频率fSAMPLING=fDTS/8,N=6

0001:采样频率fSAMPLING=fCK_INT,N=2     1001:采样频率fSAMPLING=fDTS/8,N=8

0010:采样频率fSAMPLING=fCK_INT,N=4     1010:采样频率fSAMPLING=fDTS/16,N=5

0011:采样频率fSAMPLING=fCK_INT,N=8     1011:采样频率fSAMPLING=fDTS/16,N=6

0100:采样频率fSAMPLING=fDTS/2,N=6        1100:采样频率fSAMPLING=fDTS/16,N=8

0101:采样频率fSAMPLING=fDTS/2,N=8        1101:采样频率fSAMPLING=fDTS/32,N=5

0110:采样频率fSAMPLING=fDTS/4,N=6        1110:采样频率fSAMPLING=fDTS/32,N=6

0111:采样频率fSAMPLING=fDTS/4,N=8        1111:采样频率fSAMPLING=fDTS/32,N=8

位7

MSM:主/从模式 (Master/slave mode)

0:无作用;

1:触发输入(TRGI)上的事件被延迟了,以允许在当前定时器(通过TRGO)与它的从定时器间的 完美同步。这对要求把几个定时器同步到一个单一的外部事件时是非常有用的。

位6:4

TS[2:0]:触发选择 (Trigger selection)

这3位选择用于同步计数器的触发输入。

000:内部触发0(ITR0),TIM1                                 100:TI1的边沿检测器(TI1F_ED)

001:内部触发1(ITR1),TIM2                                 101:滤波后的定时器输入1(TI1FP1)

010:内部触发2(ITR2),TIM3                                 110:滤波后的定时器输入2(TI2FP2)

011:内部触发3(ITR3),TIM4                                 111:外部触发输入(ETRF)

关于每个定时器中ITRx的细节,参见表1。

注:这些位只能在未用到(如SMS=000)时被改变,以避免在改变时产生错误的边沿检测。

位3保留,始终读为0。
位2:0

SMS[2:0]:从模式选择 (Slave mode selection)

当选择了外部信号,触发信号(TRGI)的有效边沿与选中的外部输入极性相关(见输入控制寄存器 和控制寄存器的说明)

000:关闭从模式 – 如果CEN=1,则预分频器直接由内部时钟驱动。

001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。

010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。

011:编码器模式3 – 根据另一个信号的输入电平,计数器在TI1FP1和TI2FP2的边沿向上/下计 数。

100:复位模式 – 选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存 器的信号。

101:门控模式 – 当触发输入(TRGI)为高时,计数器的时钟开启。一旦触发输入变为低,则计 数器停止(但不复位)。计数器的启动和停止都是受控的。

110:触发模式 – 计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控 的。

111:外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器。

注:如果TI1F_EN被选为触发输入(TS=100)时,不要使用门控模式。这是因为,TI1F_ED在每 次TI1F变化时输出一个脉冲,然而门控模式是要检查触发输入的电平。

表1 TIMx内部触发连接
从定时器ITR0 (TS = 000)ITR1 (TS = 001)ITR2 (TS = 010)ITR3 (TS = 011)
TIM2TIM1TIM8TIM3TIM4
TIM3TIM1TIM2TIM5TIM4
TIM4TIM1TIM2TIM3TIM8
TIM5TIM2TIM3TIM4TIM8

捕获/比较模式寄存器 1(TIMx_CCMR1)

偏移地址:0x18

复位值:0x0000

通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的CCxS定义。该寄存器其它 位的作用在输入和输出模式下不同。OCxx描述了通道在输出模式下的功能,ICxx描述了通道在 输出模式下的功能。因此必须注意,同一个位在输出模式和输入模式下的功能是不同的。

输出比较模式
位15OC2CE:输出比较2清0使能 (Output compare 2 clear enable)
位14:12OC2M[2:0]:输出比较2模式 (Output compare 2 mode)
位11OC2PE:输出比较2预装载使能 (Output compare 2 preload enable)
位10OC2FE:输出比较2快速使能 (Output compare 2 fast enable)
位9:8

CC2S[1:0]:捕获/比较2选择 (Capture/Compare 2 selection)

该位定义通道的方向(输入/输出),及输入脚的选择:

00:CC2通道被配置为输出;

01:CC2通道被配置为输入,IC2映射在TI2上;

10:CC2通道被配置为输入,IC2映射在TI1上;

11:CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。

注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=’0’)才是可写的。

位7

OC1CE:输出比较1清0使能 (Output compare 1 clear enable)

0:OC1REF 不受ETRF输入的影响;

1:一旦检测到ETRF输入高电平,清除OC1REF=0。

位6:4

OC1M[2:0]:输出比较1模式 (Output compare 1 enable)

该3位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1的值。OC1REF是高电平 有效,而OC1的有效电平取决于CC1P位。

000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用;

001 :匹配时设置通道 1 为有效电平。当计数器 TIMx_CNT 的值与捕获 / 比较寄存器 1 (TIMx_CCR1)相同时,强制OC1REF为高。

010 :匹配时设置通道 1 为无效电平。当计数器 TIMx_CNT 的值与捕获 / 比较寄存器 1 (TIMx_CCR1)相同时,强制OC1REF为低。

011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。

100:强制为无效电平。强制OC1REF为低。

101:强制为有效电平。强制OC1REF为高。

110:PWM模式1- 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否 则为有效电平(OC1REF=1)。

111:PWM模式2- 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电 平。

注1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK位)并且CC1S=’00’(该通道配置成输 出)则该位不能被修改。

注2:在PWM模式1或PWM模式2中,只有当比较结果改变了或在输出比较模式中从冻结模式 切换到PWM模式时,OC1REF电平才改变。

位3

OC1PE:输出比较1预装载使能 (Output compare 1 preload enable)

0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数 值立即起作用。

1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1的 预装载值在更新事件到来时被传送至当前寄存器中。

注1:一旦LOCK级别设为3(TIMx_BDTR寄存器中的LOCK位)并且CC1S=’00’(该通道配置成输 出)则该位不能被修改。

注2:仅在单脉冲模式下(TIMx_CR1寄存器的OPM=’1’),可以在未确认预装载寄存器情况下使 用PWM模式,否则其动作不确定。

位2

OC1FE:输出比较1 快速使能 (Output compare 1 fast enable)

该位用于加快CC输出对触发器输入事件的响应。

0:根据计数器与CCR1的值,CC1正常操作,即使触发器是打开的。当触发器的输入出现一个 有效沿时,激活CC1输出的最小延时为5个时钟周期。

1:输入到触发器的有效沿的作用就象发生了一次比较匹配。因此,OC被设置为比较电平而与 比较结果无关。采样触发器的有效沿和CC1输出间的延时被缩短为3个时钟周期。

该位只在通道被配置成PWM1或PWM2模式时起作用。

位1:0

CC1S[1:0]:捕获/比较1 选择 (Capture/Compare 1 selection)

这2位定义通道的方向(输入/输出),及输入脚的选择:

00:CC1通道被配置为输出;

01:CC1通道被配置为输入,IC1映射在TI1上;

10:CC1通道被配置为输入,IC1映射在TI2上;

11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。

注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。

输入捕获模式
位15:12IC2F[3:0]:输入捕获2滤波器 (Input capture 2 filter)
位11:10IC2PSC[1:0]:输入/捕获2预分频器 (input capture 2 prescaler)
位9:8

CC2S[1:0]:捕获/比较2选择 (Capture/compare 2 selection)

这2位定义通道的方向(输入/输出),及输入脚的选择:

00:CC2通道被配置为输出;

01:CC2通道被配置为输入,IC2映射在TI2上;

10:CC2通道被配置为输入,IC2映射在TI1上;

11:CC2通道被配置为输入,IC2映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。

注:CC2S仅在通道关闭时(TIMx_CCER寄存器的CC2E=’0’)才是可写的。

位7:4

IC1F[3:0]:输入捕获1滤波器 (Input capture 1 filter)

这几位定义了TI1输入的采样频率及数字滤波器长度。数字滤波器由一个事件计数器组成,它记录到N个事件后会产生一个输出的跳变:

0000:无滤波器,以fDTS采样                            1000:采样频率fSAMPLING=fDTS/8,N=6

0001:采样频率fSAMPLING=fCK_INT,N=2     1001:采样频率fSAMPLING=fDTS/8,N=8

0010:采样频率fSAMPLING=fCK_INT,N=4     1010:采样频率fSAMPLING=fDTS/16,N=5

0011:采样频率fSAMPLING=fCK_INT,N=8     1011:采样频率fSAMPLING=fDTS/16,N=6

0100:采样频率fSAMPLING=fDTS/2,N=6        1100:采样频率fSAMPLING=fDTS/16,N=8

0101:采样频率fSAMPLING=fDTS/2,N=8        1101:采样频率fSAMPLING=fDTS/32,N=5

0110:采样频率fSAMPLING=fDTS/4,N=6        1110:采样频率fSAMPLING=fDTS/32,N=6

0111:采样频率fSAMPLING=fDTS/4,N=8        1111:采样频率fSAMPLING=fDTS/32,N=8 注:在现在的芯片版本中,当ICxF[3:0]=1、2或3时,公式中的fDTS由CK_INT替代。

位3:2

IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler)

这2位定义了CC1输入(IC1)的预分频系数。 一旦CC1E=’0’(TIMx_CCER寄存器中),则预分频器复位。

00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;

01:每2个事件触发一次捕获;

10:每4个事件触发一次捕获;

11:每8个事件触发一次捕获。

位1:0

CC1S[1:0]:捕获/比较1选择 (Capture/Compare 1 selection)

这2位定义通道的方向(输入/输出),及输入脚的选择:

00:CC1通道被配置为输出;

01:CC1通道被配置为输入,IC1映射在TI1上;

10:CC1通道被配置为输入,IC1映射在TI2上;

11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由 TIMx_SMCR寄存器的TS位选择)。

注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。

事件产生寄存器(TIMx_EGR)

偏移地址:0x14

复位值:0x0000

位15:7保留,始终读为0。
位6

TG:产生触发事件 (Trigger generation)

该位由软件置’1’,用于产生一个触发事件,由硬件自动清’0’。

0:无动作;

1:TIMx_SR寄存器的TIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。

位5保留,始终读为0。
位4

CC4G:产生捕获/比较4事件 (Capture/compare 4 generation)

参考CC1G描述。

位3

CC3G:产生捕获/比较3事件 (Capture/compare 3 generation)

参考CC1G描述。

位2

CC2G:产生捕获/比较2事件 (Capture/compare 2 generation)

参考CC1G描述。

位1

CC1G:产生捕获/比较1事件 (Capture/compare 1 generation)

该位由软件置’1’,用于产生一个捕获/比较事件,由硬件自动清’0’。

0:无动作;

1:在通道CC1上产生一个捕获/比较事件:

若通道CC1配置为输出:

设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。

若通道CC1配置为输入:

当前的计数器值捕获至TIMx_CCR1寄存器;设置CC1IF=1,若开启对应的中断和DMA,则产 生相应的中断和DMA。若CC1IF已经为1,则设置CC1OF=1。

位0

UG:产生更新事件 (Update generation)

该位由软件置’1’,由硬件自动清’0’。

0:无动作;

1:重新初始化计数器,并产生一个更新事件。注意预分频器的计数器也被清’0’(但是预分频系 数不变)。若在中心对称模式下或DIR=0(向上计数)则计数器被清’0’,若DIR=1(向下计数)则计数 器取TIMx_ARR的值。

计数器(TIMx_CNT)

偏移地址:0x24

复位值:0x0000

位15:0CNT[15:0]:计数器的值 (Counter value)

自动重装载寄存器(TIMx_ARR)

偏移地址:0x2C

复位值:0x0000

位15:0

ARR[15:0]: 自动重装载的值 (Auto reload value)

ARR包含了将要传送至实际的自动重装载寄存器的数值。 

当自动重装载的值为空时,计数器不工作。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32H7系列微控制器具有多个定时器模块,可以用于实现定时、计数和PWM等功能。在STM32H7中,定时器同步是指将多个定时器模块的时钟源和计数值进行同步,以实现精确的时间控制。 定时器同步可以通过以下步骤来实现: 1. 配置定时器时钟源:首先,需要选择定时器的时钟源。在STM32H7中,定时器的时钟源可以选择来自内部时钟源(如系统时钟、外部晶体振荡器等)或外部时钟源(如外部信号源)。 2. 配置定时器计数模式:根据需求,选择定时器的计数模式。STM32H7的定时器可以选择向上计数、向下计数或双向计数。 3. 配置定时器同步模式:选择定时器同步模式,以确保多个定时器之间的同步。在STM32H7中,可以使用主从模式或者触发模式来实现定时器同步。 - 主从模式:其中一个定时器作为主定时器,其他定时器作为从定时器。主定时器的计数值变化会触发从定时器的计数值变化,从而实现同步。 - 触发模式:通过外部触发信号来触发定时器的计数值变化,从而实现同步。 4. 配置定时器的计数值和重载值:根据需求,设置定时器的计数值和重载值。计数值决定了定时器的计数范围,而重载值决定了定时器的溢出时间。 5. 启动定时器:配置完成后,启动定时器开始计数。 需要注意的是,具体的配置步骤和寄存器设置可能会因不同的STM32H7系列微控制器而有所差异。因此,在实际应用中,建议参考相关的芯片手册和参考资料进行具体的配置和编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值