[STM32F1] 关于stm32的定时器是16位的,我的计数会超过65535该怎么办

[复制链接]
5677|5
 楼主| 梦翔青春 发表于 2015-8-3 12:54 | 显示全部楼层 |阅读模式
stm32的定时器是16位的,我的计数会超过65535,在网上找了个方法但是还是不行,可能是我对这个程序不理解吧,希望大神给点意见,谢谢,程序如下:
s16 ENC_Get_Electrical_Angle(void)
{
static u16   lastCount = 0;
u16 curCount = ENCODER_TIMER->CNT;
s32 dAngle = curCount - lastCount;
if(dAngle >= MAX_COUNT)
{
    dAngle -= ENCODER_TIM_PERIOD;
}
else if(dAngle < -MAX_COUNT)
{
    dAngle += ENCODER_TIM_PERIOD;
}
lastCount = curCount;
return (s16)dAngle;
}
上述代码中MAX_COUNT是10ms内可能出现的计数最大值还要大的值
ENCODER_TIM_PERIOD是定时器的period值,最好比MAX_COUNT大
然后定义一个32位的有符号变量,如currentCount
然后每隔10ms执行一次
currentCount += Enc_GetCount();

其中if(dAngle >= MAX_COUNT)
{
    dAngle -= ENCODER_TIM_PERIOD;
}
else if(dAngle < -MAX_COUNT)
{
    dAngle += ENCODER_TIM_PERIOD;
}是什么意思呀,或者还有其他的方法的。
求帮助,谢谢
amanda_s 发表于 2015-8-3 17:51 | 显示全部楼层
可以用两个定时器级联的办法。
amanda_s 发表于 2015-8-3 17:51 | 显示全部楼层
先去看看TIM级联的介绍和应用的例程。
应该是可以的。
mmuuss586 发表于 2015-8-3 20:17 | 显示全部楼层
每次溢出的时候:再加65535倍;
 楼主| 梦翔青春 发表于 2015-8-4 11:28 | 显示全部楼层
amanda_s 发表于 2015-8-3 17:51
先去看看TIM级联的介绍和应用的例程。
应该是可以的。

好的,谢谢
 楼主| 梦翔青春 发表于 2015-8-4 11:29 | 显示全部楼层
mmuuss586 发表于 2015-8-3 20:17
每次溢出的时候:再加65535倍;

好的,谢谢:hug:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

25

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部