F407旋转编码器捕获问题

问题遇到的现象和发生背景

板子是STM32F407,目的是用cube的HAL库配置编码器模式,读取到旋转编码器的旋转方向和计数值

所用旋转编码器:

img


cube代码,TIM3的编码器模式,4分频,上下沿计数,未开中断

img

img

缓慢转动编码器时,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的编码器模式有什么用了,为什么用它的读取计数方向和计数功能达不到我的目的

https://blog.csdn.net/return_oops/article/details/109569827
不懂看下是不是有用

把你两个通道对应的io引脚配置成既不上拉,也不下拉(no pull-up no pull-down)看看

参考下这个链接,期望对你有所帮助:https://blog.csdn.net/wdsclm937256/article/details/126071446
【欢迎留言,跟进问题状态】