外贸建站如何推广,产品包装设计网站找谁做,空间和域名一年多少钱,南昌网站开发这里是看了江协STM32 EXTI中断视频并配合笔记STM32学习笔记#xff08;三#xff09;丨中断系统丨EXTI外部中断#xff08;对射式红外传感器计次、旋转编码器计次#xff09; 后的一点小补充。 方法一#xff0c;一方下降沿同时查看另一方电平#xff0c;以A为例#xf…这里是看了江协STM32 EXTI中断视频并配合笔记STM32学习笔记三丨中断系统丨EXTI外部中断对射式红外传感器计次、旋转编码器计次 后的一点小补充。 方法一一方下降沿同时查看另一方电平以A为例A下降时若B为高电平则为正向A下降时若B为低电平则为反向这种判断方法有个问题另一方电平会有一定持续时间延迟从而用很小的力扭旋钮也会触发中断导致没有转到位就出现数字变化的情况不推荐
void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line0) SET){/*如果出现数据乱跳的现象可再次判断引脚电平以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) 0){if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 1){Encoder_Count ;}}EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line1) SET){/*如果出现数据乱跳的现象可再次判断引脚电平以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0){if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) 1){Encoder_Count --;}}EXTI_ClearITPendingBit(EXTI_Line1);}
}
方法二官方方法通过A,B电平变化的滞后性来判断如果A下降之后B也下降就是正向而B下降后A再下降就是反向由于A,B变化都是即时性的就很好的解决了上面方法一的问题
void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line0) SET){/*如果出现数据乱跳的现象可再次判断引脚电平以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) 0){if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0){Encoder_Count --;}}EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line1) SET){/*如果出现数据乱跳的现象可再次判断引脚电平以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0){if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) 0){Encoder_Count ;}}EXTI_ClearITPendingBit(EXTI_Line1);}
}