打印

STM32定时器定时不准确

[复制链接]
5634|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-5-15 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在用STM32。大致是想用定时器,记下两个方波上升沿之间的那段时间。
1:   当第一个方波的上升沿到来时,IO口触发中断,在中断中,    我打开了定时器中断并读出了此时的定时器值1。
2:当第二个方波的上升沿到来时,也触发IO中断,同样在中断中我也读出了此时的定时器值2,并关掉定时器  中断。
3:在此之间,定时器可能会溢出,在定时器溢出中断中我记下了溢出的次数time;
4:总时间=定时器值2 +65535*time -定时器值1;
问题来了  这样算下来的时间和实际用示波器量的时间存在一个固定的差值,虽然减去这个差值能得到正确的时间,但心里始终不安啊!

补充:开始我认为时钟计算不对,但我下来仔细看了时钟,应该没问题。我用的是外部晶振11.0592M,对PLL进行了6倍频,APB1进行了2分频,定时器预分频为1。
  
  请各位朋友,用过STM32的兄弟,定力支持下,看了下datasheet,也没解决。下面是IO中断代码部分:
   void EXTI9_5_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line6) != RESET)  //  触发开始的方波
   {
     EXTI_ClearITPendingBit(EXTI_Line6);
  ENABLE_PB8_INT;
    }
   if(EXTI_GetITStatus(EXTI_Line8) != RESET)  //第一个上升沿到
       {
          DISABLE_PB8_INT;
  TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);  //打开定时器中断  
      capturetime1=TIM_GetCounter(TIM5);   //定时器值1
          EXTI_ClearITPendingBit(EXTI_Line8);
  ENABLE_PB7_INT;
        }
   if(EXTI_GetITStatus(EXTI_Line7) != RESET)   //第二个上升沿到
    {
     capturetime2=TIM5->CNT;   //记下定时器值2
totaltime=(capturetime2+overflowtimes*65535-capturetime1)*0.03; //0.03是定时器周期
     TIM_ITConfig(TIM5, TIM_IT_Update, DISABLE);  //overflowtimes是溢出次数
DISABLE_PB7_INT;
     EXTI_ClearITPendingBit(EXTI_Line7);
overflowtimes=0;
    }
  



沙发
ups888| | 2013-5-15 10:23 | 只看该作者
看看有没有捕获方式。

使用特权

评论回复
板凳
IJK| | 2013-5-15 10:25 | 只看该作者
1)通常芯片不会出现这种问题的。
2)我简单看了一下,LZ的想法有问题,应该用65536而非65535:
总时间=定时器值2 +65535*time -定时器值1;

使用特权

评论回复
地板
huangfeng33| | 2013-5-15 20:36 | 只看该作者
定时器溢出了,时钟的速度太快了。。。

要不改时钟,要不你就做溢出次数的统计

这个不能说是人家不准啊

使用特权

评论回复
5
hawksabre| | 2013-5-15 21:38 | 只看该作者
时钟溢出  这个问题不叫头疼   需要做很多测试      

使用特权

评论回复
6
拿起书本|  楼主 | 2013-5-15 22:10 | 只看该作者
先谢谢楼上各位朋友
1:我做了定时器溢出次数计算的;
    2:时钟快慢只能影响溢出的快慢,不会影响结果啊;
    3:对于我上面的计算两方波上升沿之间的时间差,是不断循环的,也就是要一直不停的计算时间差。所以  时钟快慢,始终都会有溢出的;
    4:肯定ST的定时器是准的,我只是找不出不准的原因。

使用特权

评论回复
7
jxmzzr| | 2013-5-23 22:04 | 只看该作者
有溢出是可以的。否则,提供分频系数将降低计时的分辨率。

出现固定的误差是正常的,这是代码运行的路径差异造成的。用基准信号调试,找到并补偿误差就可以了。

使用特权

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

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝