STM8 TIM 定时器使用要点:
STM8的定时器功能很强大,给使用上带来不少麻烦。初学STM8,总结了以下《STM8 TIM 定时器使用要点》,如有不正确之处,请指正。
联系QQ:357641612
Email: Delong_z@163.com
1、分频:
TIM1 可以在(1~65536)之间任意分频:
Fck_cnt=Fck_psc/(PSCR[15:0]+1)
先写高字节,后写低字节,更新事件后生效。
TIM2/TIM3/TIM5 可以在(1~32768)之间以2的幂分频:
Fck_cnt=Fck_psc/(2^(PSCR[3:0]))
更新事件后生效。
2、预装载:
ARR/OCiR预装载允许时(ARPE=1 OCiPE=1),写入的寄存器值不会直接进入影子寄存器,需要发生一次更新事件后,才生效。
ARR/OCiR预装载禁止时(ARPE=0 OCiPE=0),写入的寄存器值直接进入影子寄存器,立即生效,因此可能造成第一次的波形不正常。
3、更新:
置位TIMx_EGR的UG位可以软件生成一个更新事件。
向上计数方式时,CNT从ARR跳变到0时产生更新事件。
向下计数方式时,CNT从0跳变到ARR时产生更新事件。
向上/向下计数方式时(中央对齐模式),OCRi寄存器的值是比较值(OCiREF的有效时间)的一半,ARR寄存器的值是 实际周期值(不用-1)的一半,CNT从ARR-1增加到ARR时产生上溢事件,CNT从1减少到0时产生下溢事件。
安全使用中央对齐模式的计数器的方法是在启动计数器之前先用软件(置位TIM1_EGR寄存器的UG位)产生一个更新事件,并且不在计数器计数时修改计数器的值。
4、PWM模式:
PWM边沿对齐PWM1模式,向上计数时,CCRx正确取值范围为(0~ARR):
CCRx=0 时,产生全无效电平(产生占空比为0%的PWM波形)。
CCRx<=ARR 时,产生CCRx个有效电平(产生占空比为 CCRx/(ARR+1)*100% 的PWM波形)。
CCRx>ARR 时,产生全有效电平。
PWM边沿对齐PWM1模式,向下计数时,CCRx正确取值范围为(0~ARR):
CCRx=0 时,不能产生占空比 0% 的PWM波形(产生占空比为1/(ARR+1)*100%的PWM波形)。
CCRx<=ARR 时,产生CCRx+1个有效电平(产生占空比为 (CCRx+1)/(ARR+1)*100% 的PWM波形)。
CCRx>ARR 时,产生全有效电平。
5、单脉冲模式
这种模式允许计数器响应一个激励,并在一个程序可控的延时之后产生一个脉宽可控的脉冲。
仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发),必须如下配置:
向上计数方式:计数器CNT < CCRi ≤ ARR,
向下计数方式:计数器CNT > CCRi。
6、捕获脉冲:
自动复位计数器方式下的PWM输入信号测量(参见RM0016 英文版P167/中文版P132):
在该模式下,可以方便地测试输入信号的周期(频率/转速)和占空比。
TIMx_CCR1的 寄存器值+1 就是周期计数值,TIMx_CCR2的 寄存器值+1 就是高电平计数值。
占空比=(TIMx_CCR2+1)/(TIMx_CCR1+1)*100%
★★★需要注意的是,使用这种方法时,TIMx的溢出周期时间必须大于待测信号的最大周期。
例如:16M HSI内部振荡,16分频(TIM1_PSCR=16-1),TIM1 定时时基为 1us,则 TIM1 可测最大信号周期为 65536 us(最大可捕获值65535+1)。信号周期如果超过这个时间,捕获值就不是周期和占空比了。
7、其它捕获方式:
可以用不复位计数器的方式对输入信号进行捕获。数据处理上稍麻烦一点。
天之蛟龙
2012-04-17 |