打印
[STM32F1]

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

[复制链接]
5064|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倍;

使用特权

评论回复
5
梦翔青春|  楼主 | 2015-8-4 11:28 | 只看该作者
amanda_s 发表于 2015-8-3 17:51
先去看看TIM级联的介绍和应用的例程。
应该是可以的。

好的,谢谢

使用特权

评论回复
6
梦翔青春|  楼主 | 2015-8-4 11:29 | 只看该作者
mmuuss586 发表于 2015-8-3 20:17
每次溢出的时候:再加65535倍;

好的,谢谢:hug:

使用特权

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

本版积分规则

4

主题

25

帖子

0

粉丝