打印
[STM8]

STM8中TIM2,3,4同时开启定时,第一次中断时间不准

[复制链接]
5107|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
honami520|  楼主 | 2010-6-26 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void TIM2_INIT(void)
{
TIM2_PSCR = 2;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM2_ARRH = 0x27; /*50ms中断一次*/
TIM2_ARRL = 0x10;
TIM2_IER = 0x01; /*更新中断使能*/
TIM2_CR1 = 0x81; /*使能计数器*/
}
void TIM3_INIT(void)
{
TIM3_PSCR = 1;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM3_ARRH = 0x27; /*50ms中断一次*/
TIM3_ARRL = 0x10;
TIM3_IER = 0x01; /*更新中断使能*/
TIM3_CR1 = 0x81; /*使能计数器*/
}
void TIM4_INIT(void)
{
TIM4_PSCR = 1;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM4_ARR = 0x64; /*100us中断一次*/
TIM4_IER = 0x01; /*更新中断使能*/
TIM4_CR1 = 0x81; /*使能计数器*/

@far @interrupt void TIM2_Interrupt (void)
{
  tm2++;
  TIM2_SR1 = 0x00;
    return;
}

@far @interrupt void TIM3_Interrupt (void)
{

  tm3++;
  TIM3_SR1 = 0x00;
    return;
}

@far @interrupt void TIM4_Interrupt (void)
{
   tm4++;

  TIM4_SR1 = 0x00;
    return;
}

上面是我的定时器初始化和中断函数。TIM4每100us中断一次,TIM3是10ms中断一次,TIM4是20ms中断一次。结果每次都是TIM2先中断,此时tm4才49,然后马上进入TIM3中断,此时tm4还是49。按F5下一次还是进入TIM3中断,此时tm4就是149了。现在就是有问题了啊。这定时器TIM2、TIM3的第一次中断总是预定值的一半,后面再进中断的时候就正常了,这是怎么回事啊?有人说是预装载开了没,我现在开了也没用,还是这样。希望知道的人说说看啊,花不了您几分钟的。
}
沙发
香水城| | 2010-6-26 11:02 | 只看该作者
是否正确设置了预装载功能。

请看我的博客:STM32定时器的预装载寄存器与影子寄存器之间的关系

使用特权

评论回复
板凳
jia963801482| | 2010-7-11 18:45 | 只看该作者
必须软件更新一次才行。ug

使用特权

评论回复
地板
CrazyST| | 2010-7-21 17:28 | 只看该作者
如果没有计数器更新(溢出),预分器值仍然是0而不是你设置的2,所以你第一次计数值肯定是你设想的一半

使用特权

评论回复
5
honami520|  楼主 | 2010-7-22 17:52 | 只看该作者
啥叫软件更新一次啊???

使用特权

评论回复
6
yybj| | 2010-7-23 13:01 | 只看该作者
应该重新装载一次

使用特权

评论回复
7
CrazyST| | 2010-7-23 17:47 | 只看该作者
软件更新寄存器TIMx_EGR,其中第0位是产生更新事件,手册上特别说到预分频器的计数器也被清零,但是预分频系数不变,我的理解是,预分频器要经过一次更新(溢出)事件后才真正生效!我每次配置定时器在启动之前都会执行一次软件更新事件以确保全部预转载值在定时器开启后马上生效!

使用特权

评论回复
8
秋天落叶| | 2010-7-23 22:21 | 只看该作者
软软件更新是否就是重新初始化呢

使用特权

评论回复
9
CrazyST| | 2010-7-24 18:53 | 只看该作者
我就是这样认为的,要不怎么会翻译成“更新”呢:)

使用特权

评论回复
10
tieguanyin2008| | 2010-9-26 10:16 | 只看该作者
你的TIM2_PSCR = 2;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/ 不对,其实是2^2=4分频。中断周期是2us, 中断周期是10000x2us=20ms.
TIM3按你的设置,中断周期是10ms,
你没改优先级,这几个定时器都是3级,谁也不能中断谁。谁先到谁中断。

使用特权

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

本版积分规则

25

主题

189

帖子

2

粉丝