首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

STM32定时器计时不正确,总有个固定的时间差?

2013-04-05 
STM32定时器计时不准确,总有个固定的时间差??:这样算下来的时间和实际用示波器量的时间存在一个固定的差值

STM32定时器计时不准确,总有个固定的时间差??

    这样算下来的时间和实际用示波器量的时间存在一个固定的差值,虽然减去这个差值能得到正确的时间,但心里始终不安啊!

补充:开始我认为时钟计算不对,但我下来仔细看了时钟,应该没问题。我用的是外部晶振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;
    }
  

  STM32定时器计时不正确,总有个固定的时间差?
[解决办法]
定时器溢出了,时钟的速度太快了。。。

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

这个不能说是人家不准啊
[解决办法]
有溢出是可以的。否则,提供分频系数将降低计时的分辨率。

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

[解决办法]
定时器中断中有执行代码时,会影响定时器的精度

热点排行