问题遇到的现象和发生背景
板子是STM32F407,目的是用cube的HAL库配置编码器模式,读取到旋转编码器的旋转方向和计数值
所用旋转编码器:
cube代码,TIM3的编码器模式,4分频,上下沿计数,未开中断
缓慢转动编码器时,PC串口接收到的数据是
编码器计数值为255
编码器计数值为254
编码器计数值为253
编码器计数值为252
依次递减
然后计数方向不断在0和1之间无规律跳动
疑问的是为什么计数值从255开始向下计数,并且无论正转反转都往下计数,计数到0又变回255,接收到的计数方向也跟转动没规律,有时0有时1,cube里改了滤波值也解决不了问题
用代码块功能插入代码,请勿粘贴截图
while (1)
{
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET);//LED1
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);//LED2
count = (uint32_t)__HAL_TIM_GET_COUNTER(&htim3);
direction = (short)__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
Direction= (short)__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
printf("编码器计数值为%d\r\n",count);
printf("编码器方向为%d\r\n",Direction);
HAL_Delay(1000);
}
我想要达到的结果
想实现初始计数值为0,正转编码器时,计数递增,反转递减,串口能正确打印计数值和计数方向
知道用另一个定时器中断读取也可以,但这样我还是不清楚32的编码器模式有什么用了,为什么用它的读取计数方向和计数功能达不到我的目的