PA6和PA7两个引脚不能任意更改,要接到定时器的通道一和通道二上
代码思路
第一步,RCC开启时钟,开启GPIO和定时器的时钟
第二步,配置GPIO,把PA6和PA7配置成输入模式
第三步,配置时基单元,这里预分频器选择不分频,自动重装选最大65535,这里只需要CNT计数
第四步,配置输入捕获单元,只不过这里输入捕获单元,只有滤波器和极性两个参数有效
第五步,配置编码器模式(这里只需调用库函数即可)
最后,调用TIM_Cmd打开时钟
如果是需要得出编码器的位置,直接读取CNT的值即可
如果是需要测量编码器的速度和方向,则需要固定一段时间取出CNT的值,然后再清零,也就是测频法的思路
本节要用到的库函数
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);
*定时器编码器接口配置
如何选择上拉还是下拉?和外部模块输出的默认状态有关,默认输出高电平则上拉;默认输出低电平则下拉;不确定外部模块输出状态或者外部模块输出功率比较小,选择浮空输入(优点是,没有上下拉电阻影响外部信号;缺点是,当引脚悬空时,没有默认电平了,输入就会受噪声干扰,来回不断的跳变)。但习惯上都选择上拉
过长的delay会阻塞主程序的运行,所以可以选择定时中断替代