旋转编码器A口接GPIOB0,B口接GPIOB1。设置中断类型为上升下降沿均触发。
输出是用0.96寸oled输出
A脚设置为上升下降沿均会进中断,下降上升一个变换周期,判断这个周期的A脚,B脚的始末状态,来判断正反转一次。文章来源:https://www.toymoban.com/news/detail-601308.html
A口输出的波形用来中断,B口输出的波形用来判断正转还是反转文章来源地址https://www.toymoban.com/news/detail-601308.html
void EXTI0_IRQHandler(void)
{
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 1&&inNum==0)//第一次中断 并且A口上升
{
flag=0;
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1)
{
flag=1; //根据B相,设定标志
}
inNum=1; //中断计数
}
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0&&inNum==1)//第二次中断 并且A口下降
{
//if(flag==0) ENcoder_Count++;
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0 && flag==1) ++ENcoder_Count;
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1 && flag==0) --ENcoder_Count;
inNum=0; //中断计数复位,准备下一次
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
到了这里,关于关于stm32旋转编码器计次乱跳问题(消抖)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!