(以下内容基于STM32f407ZET6)
对于F407来说,可以用作编码器模式的只有高级定时器TIM1和TIM8,通用定时器有TIM2 TIM3 TIM4 TIM5。且每个定时器只有通道1和通道2能作为正交解码。还要注意一下定时器5和定时器2是32位定时器,装载数值时注意要装载0xffffffff。
本人在配置正交解码时读取编码器的值出现当读取数字为负时数字会变为65535的情况,当时我用的是long int 型变量来储存读取到的速度值,经过查阅资料发现STM32的正交解码使用的是一个16bit寄存器储存解码值,当正转时数字上升,反转时下降,当低于0时会向下溢出变为0xFFFF。利用此性质,可直接强转寄存器值为short,采用补码的形式编码,即用short型变量来储存读取到的速度,完美解决此问题。