arraybat 发表于 2013-3-4 16:11:40

为什么我的stm32 的tim3 1ms中断时间不准

                                        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该怎么办?
                     
 

发表于 2013-3-5 10:09:38

RE:为什么我的stm32 的tim3 1ms中断时间不准

楼主如何来确定的当前并没有加到1ms?

arraybat 发表于 2013-3-5 14:30:50

回复:为什么我的stm32 的tim3 1ms中断时间不准

回复第 2 楼 于2013-03-05 10:09:38发表:
楼主如何来确定的当前并没有加到1ms? 

我用它来做的时钟,每1000ms就秒加1,然后以此类推,分钟、小时。
但是电脑上经过一分钟的时候,这个stm32的才跑了50多秒。
 
现在发现问题了:我用tim2的100ms中断做,时间就很准,跑两个小时了没有偏移1s。
可能的问题;1:tim2的中断优先级别高。
                    2:是不是tim3 1ms中断中需要执行的代码太长了,耗时太久?

arraybat 发表于 2013-3-5 14:34:23

回复:为什么我的stm32 的tim3 1ms中断时间不准

回复第 2 楼 于2013-03-05 10:09:38发表:
楼主如何来确定的当前并没有加到1ms? 

tim3中代码比较长   所以没有全部粘帖。
页: [1]
查看完整版本: 为什么我的stm32 的tim3 1ms中断时间不准