打印
[STM8]

《STM8 TIM 定时器使用要点》

[复制链接]
10344|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
delong_z|  楼主 | 2012-4-17 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
评分
参与人数 1威望 +1 收起 理由
触觉的爱 + 1
沙发
无冕之王| | 2012-4-17 19:06 | 只看该作者
总结的不错

使用特权

评论回复
板凳
pkat| | 2012-4-17 19:40 | 只看该作者
对STM8的初学者很有帮助

使用特权

评论回复
地板
xsgy123| | 2012-4-17 21:39 | 只看该作者
不错的经验,鼓励共享

使用特权

评论回复
5
秋天落叶| | 2012-4-17 21:43 | 只看该作者
多总结还是很有好处的

使用特权

评论回复
6
z18497| | 2012-4-22 08:37 | 只看该作者
捕获中断设置
请问STM8S103中设置捕获PC6的信号,这样设置可以吗?高低电平时间都要捕获
请问这样设置捕获可以吗?
TIM1_DeInit();
  TIM1->PSCRH=0X03;
TIM1->PSCRL=0X1F;//设置分频=800,计800/16=50us记数周期
TIM1->CCER1&=0XFE;//禁止输入捕获1
TIM1->CCMR1|=0X01;//PC6(CH1)到ti1fp1
TIM1->CCER1&=0XEC;//CH1 上升沿触发
TIM1->IER|=0X02;//势能中断CH1
TIM1->CCER1|=0X01;//使能输入捕获1
TIM1_Cmd(ENABLE);//使能计数
  rim();                // 允许CPU全局中断

中断中的程序如下:
if(TIM1_GetITStatus(TIM1_IT_CC1))
{
   TIM1_ClearITPendingBit(TIM1_IT_CC1);
if(GPIOC->IDR&0x40) TIM1->CCER1|=0X02;//ch1 下降沿触发
else TIM1->CCER1&=0XEC;//ch1 上升沿触发
tmpcntr=TIM1_GetCapture1();
TIM1_Cmd(ENABLE);//使能计数
}


使用特权

评论回复
7
Donry| | 2012-5-11 22:25 | 只看该作者
谢谢楼主,受教了!

使用特权

评论回复
8
huangfeng33| | 2013-12-7 21:47 | 只看该作者
呵呵,这个定时器确实有点繁杂,需要认真对待了。谢谢你的共享。

使用特权

评论回复
9
ahuzjh| | 2013-12-7 22:44 | 只看该作者
不错的经验,支持,顺便学习了。

使用特权

评论回复
10
xiaox314| | 2014-1-9 11:06 | 只看该作者
这个必须赞

使用特权

评论回复
11
akung| | 2014-5-19 10:52 | 只看该作者
刚接触定时器 还云来雾里滴

使用特权

评论回复
12
gyh974| | 2014-5-25 08:53 | 只看该作者
:handshake

使用特权

评论回复
13
zoulinqi110| | 2014-7-3 15:49 | 只看该作者
z18497 发表于 2012-4-22 08:37

我也在做这个,一直解决不了,你解决了吗? 能给我发一份吗? 1169439620@qq.com谢谢

使用特权

评论回复
14
nienianhong| | 2014-7-4 09:59 | 只看该作者
赞一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

84

帖子

1

粉丝