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;
}
[解决办法]
定时器溢出了,时钟的速度太快了。。。
要不改时钟,要不你就做溢出次数的统计
这个不能说是人家不准啊
[解决办法]
有溢出是可以的。否则,提供分频系数将降低计时的分辨率。
出现固定的误差是正常的,这是代码运行的路径差异造成的。用基准信号调试,找到并补偿误差就可以了。
[解决办法]
定时器中断中有执行代码时,会影响定时器的精度