TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period =8000;//// 6735;//6799;
TIM_TimeBaseStructure.TIM_Prescaler = 8;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //设置了时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_Cmd(TIM3, ENABLE);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
void TIM3_IRQHandler(void)
{ u16 comparetime;
u8 nn;
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
// TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
TIM_ClearITPendingBit(TIM3, 0xffff);
ms++;
}
}
本来想ms是1ms加1,加到1000就是1s,但是实际上慢了。把TIM_Period减小到6735,才差不多是1ms。
按理说tim3,系统是72mhz,9分频得到8Mhz,加到8000为1ms。
请问为什么会慢?要精确定时1ms该怎么办?
|
|
RE:为什么我的stm32 的tim3 1ms中断时间不准
回复:为什么我的stm32 的tim3 1ms中断时间不准
楼主如何来确定的当前并没有加到1ms?
我用它来做的时钟,每1000ms就秒加1,然后以此类推,分钟、小时。
但是电脑上经过一分钟的时候,这个stm32的才跑了50多秒。
现在发现问题了:我用tim2的100ms中断做,时间就很准,跑两个小时了没有偏移1s。
可能的问题;1:tim2的中断优先级别高。
2:是不是tim3 1ms中断中需要执行的代码太长了,耗时太久?
回复:为什么我的stm32 的tim3 1ms中断时间不准
楼主如何来确定的当前并没有加到1ms?
tim3中代码比较长 所以没有全部粘帖。