板子是STM32F407,目的是用cube的HAL库配置编码器模式,读取到旋转编码器的旋转方向和计数值
所用旋转编码器:
缓慢转动编码器时,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
【欢迎留言,跟进问题状态】