本来打算用定时器的编码器模式计数编码器正反转脉冲数,向上计数,TI1的边沿计数,重载寄存器ARR的值设为399。
当编码器正转时,计数器CNT能从0向上计数增加至399后,CNT置为0,同时产生跟新中断,然后再计数计数。
但是,当编码器反转,CNT由当前值减为0后,就一直为0,不跳变为399继续减小。应该跳变至ARR中的399才对呀,
为什么会这样,请教高人!
下面是编码器模式配置代码
void TIM5_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //时基结构
TIM_ICInitTypeDef TIM_ICInitStructure; //脉冲输入结构体
TIM_TimeBaseStructure.TIM_Prescaler=0; //定时器时钟设为72M
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
TIM_TimeBaseStructure.TIM_Period=0X2CF; //设置重载寄存器的值,周期设为720个脉冲
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //频率给滤波器用,频率对外部时钟滤波
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);
TIM_EncoderInterfaceConfig(TIM5, TIM_EncoderMode_TI1, //调用库函数中的编码器接口模式函数
TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_ICStructInit(&TIM_ICInitStructure);
TIM_ICInitStructure.TIM_ICFilter = 6; //ICx_FILTER;
TIM_ICInit(TIM5, &TIM_ICInitStructure);
TIM_ClearFlag(TIM5, TIM_FLAG_Update);
TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);
TIM5->CR1|=0x01; //使能CR1计数器中的CNT位
TIM5->CNT = 0;
TIM_Cmd(TIM5, ENABLE);
}
编码器反转的时候,CNT减为0后就停止不变了,为什么?难道编码器在改变转动方向时,把计数方向也要改了? |