打印
[STM32F1]

STM32F1定时器跑偏求助

[复制链接]
691|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guoruinianfeng|  楼主 | 2017-11-22 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guoruinianfeng 于 2017-11-22 10:52 编辑

亲们 定时器跑一阵后 就偏差了 这是为什么
跑了十几分钟后就不准了
大神可以指点一下吗

沙发
guoruinianfeng|  楼主 | 2017-11-22 10:47 | 只看该作者
                TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

                TIM_TimeBaseStructure.TIM_Period = 10000;                               
                TIM_TimeBaseStructure.TIM_Prescaler = 71;                                         
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;                               
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;       
                TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                       
               
                TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);                               
               
                TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);                                               
                TIM_Cmd(TIM2, ENABLE);                                                                               

使用特权

评论回复
板凳
guoruinianfeng|  楼主 | 2017-11-22 10:48 | 只看该作者
计时每隔1ms进入一次中断  ,累计至50S,120S,200S,260S,分别处理四次事件,然后到300S,计数值清零,从0开始计时。

使用特权

评论回复
地板
mmuuss586| | 2017-11-22 11:16 | 只看该作者
应该是定时时间短的时候误差小;
时间长误差大吧?

你可以把每段时间的误差,列个表格,查下原因看看;

使用特权

评论回复
5
guoruinianfeng|  楼主 | 2017-11-22 11:18 | 只看该作者
mmuuss586 发表于 2017-11-22 11:16
应该是定时时间短的时候误差小;
时间长误差大吧?

谢谢版主回复

我觉得也是这样  之前用的定时器都是在几秒就清零了

这次时间长好多 都300S了  

使用特权

评论回复
6
mmuuss586| | 2017-11-22 13:59 | 只看该作者
guoruinianfeng 发表于 2017-11-22 11:18
谢谢版主回复

我觉得也是这样  之前用的定时器都是在几秒就清零了

那就想办法补偿;
改大定时器的时钟源分频,1MS中断1次太快了;

使用特权

评论回复
7
guoruinianfeng|  楼主 | 2017-11-22 16:06 | 只看该作者
mmuuss586 发表于 2017-11-22 13:59
那就想办法补偿;
改大定时器的时钟源分频,1MS中断1次太快了;

多谢版主协助分析,原因找到了,在else if {Count = 0;} 这里面我只对Count清零了,但是对事件接下来的操作没做处理,加了第一个事件的处理语句就OK了。
非常感谢

使用特权

评论回复
8
mmuuss586| | 2017-11-22 16:45 | 只看该作者
guoruinianfeng 发表于 2017-11-22 16:06
多谢版主协助分析,原因找到了,在else if {Count = 0;} 这里面我只对Count清零了,但是对事件接下来的操 ...

解决了就好

使用特权

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

本版积分规则

7

主题

16

帖子

0

粉丝