1)时钟选择
计数器时钟可以由下列时钟源提供:
内部时钟(CK_INT);
外部时钟模式1:外部输入脚(TIx);
外部时钟模式2:外部触发输入(ETR);
内部触发输入(ITRx),用于级联:使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
定时器级联的引脚对应方式不是任意的,其关联方式见表6.12。
表6.12 定时器级联时主从定时器引脚的关联方式
定时器级联时的连接示例如图6.31所示。
图6.31 定时器级联的连接示例
配置定时器1为主模式,它可以在每一个更新事件UEV时输出一个周期性的触发信号。在TIM1_CR2寄存器的MMS=010时,每当产生一个更新事件时在TRGO1上输出一个上升沿信号。
连接定时器1的TRGO1输出至定时器2,设置TIM2_SMCR寄存器的TS=000,配置定时器2为使用ITR1作为内部触发的从模式。
然后把从模式控制器置于外部时钟模式1(TIM2_SMCR寄存器的SMS=111):这样定时器2即可由定时器1周期性的上升沿(即定时器1的计数器溢出)信号驱动。
最后,必须设置相应(TIMX_CR1寄存器)的CEN位并分别启动两个定时器。其实就是主定时器产生一个触发信号让从定时器去接收这个触发信号,通过这个触发信号来让从定时器工作。
2)计数器工作模式
计数器的基本工作方式见表6.13。
表6.13 定时器的基本工作方式
续表
通用寄存器工作依赖于3个时基单元,它们是:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动装载寄存器(TIMx_ARR)。
(1)计数器寄存器:TIMx_CNT
计数寄存器是一个16位的寄存器,其定义方式如图6.32所示。
图6.32 计数寄存器(TIMx_CNT)
①向上计数模式。计数器从0计数到设定的数值,然后重新从0开始计数并且产生一个计数器溢出事件,如图6.33所示。
图6.33 计数器时序图(内部时钟分频因子为1)
②向下计数模式。计数器从设定的数值开始向下计数到0,然后自动从设定的数值重新向下计数,并产生一个向下溢出事件,如图6.34所示。
③中央对齐模式(向上/向下计数)。计数器从0开始计数到设定的数值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;再从0开始重新计数,如图6.35所示。
图6.34 计数器时序图(内部时钟分频因子为4)
图6.35 计数器时序图(内部时钟分频因子为1,TIMx_ARR=0x6)
(2)预分频器TIMx_PSC
预分频器可以将计数器的时钟频率按1—65 536的任意值分频,它是一个16位寄存器。这个寄存器带有缓冲区,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采用。其定义方式如图6.36所示。
图6.36 预分频器TIMx_PSC定义
在计数器工作过程中,改变预分频器值的生效时序如图6.37所示。
图6.37 预分频器寄存器在事件更新时采用
(3)自动装载寄存器TIMx_ARR(www.xing528.com)
自动装载寄存器是预先装载的(要在使能定时器之前设定好),根据在TIMx_CR1寄存器中自动装载使能位(ARPE)的设置,立即或者在每次更新事件时传送到计数器,如图6.38所示。
3)通用寄存器的特殊工作模式
(1)输入捕获模式
在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果使能中断或者DMA操作,则将产生中断或者DMA操作。
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
(2)PWM输入模式
PWM输入模式可用来测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值):
①选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。
②选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。
③选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。
④选择TI2FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。
⑤选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。
⑥配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。
⑦使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。
由于只有TI1FP1和TI2FP2连到了从模式控制器,因此PWM输入模式只能使用TIMx_CH1/TIMx_CH2信号。
图6.38 自动装载寄存器的生效时序图
(3)输出模式
在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx)能够直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。
例如:CCxP=0(OCx高电平有效),则OCx被强置为高电平。置TIMx_CCMRx寄存器中的OCxM=100,可强置OCxREF信号为低。
(4)输出比较模式
输出比较模式的功能是用来控制一个输出波形,或者指示一段给定的时间已经到时。当计数器与捕获/比较寄存器的内容相同时,输出比较模式做如下操作:
将输出比较模式和输出极性定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平(OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。
设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF位)。
若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE位),则产生一个中断。
若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器中的CCDS位选择DMA请求功能),则产生一个DMA请求。
输出比较模式的配置步骤:
①选择计数器时钟(内部、外部、预分频器)。
②将相应数据写入TIMx_ARR和TIMx_CCRx寄存器中。
③如果要产生一个中断请求和/或一个DMA请求,设置CCxIE位和CCxDE位。
④选择输出模式。
⑤设置TIMx_CR1寄存器的CEN位启动计数器。
(5)PWM模式
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。
在TIMx_CCMRx寄存器中的OCxM位写入110(PWM模式1)或111(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器。
最后要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。
下面是一个PWM模式1的例子。
当TIMx_CNT<TIMx_CCRx时PWM信号参考OCxREF为高,否则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF保持为1。如果比较值为0,则OCxREF保持为0。图6.39为TIMx_ARR=8时边沿对齐的PWM波形实例。
(6)单脉冲模式
单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个程序可控的延时之后,产生一个脉宽可程序控制的脉冲。
可以通过从模式控制器启动计数器,在输出比较模式或者PWM模式下产生波形。设置TIMx_CR1寄存器中的OPM位将选择单脉冲模式,这样可以让计数器自动地在产生下一个更新事件UEV时停止。
图6.39 PWM模式1的例子
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。