STM32 EC11旋转编码器扫描读取
EC11电路如下
扫描代码如下,经测试靠谱
uint32_t wait_t = 0;bool encoder_switch = 0;uint8_t encoder_a_pre = HAL_GPIO_ReadPin(GPIOA, EC11_A_Input_Pin);int32_t steps = 0;uint8_t encoder_a_temp ;/* Infinite loop */while (1){uint32_t t = HAL_GetTick();uint8_t encoder_a = HAL_GPIO_ReadPin(GPIOC, EC11_A_Input_Pin);uint8_t encoder_b = HAL_GPIO_ReadPin(GPIOC, EC11_B_Input_Pin);if (encoder_a_pre != encoder_a && !encoder_switch){wait_t = HAL_GetTick();encoder_a_temp = encoder_a;encoder_switch = true;}if (encoder_switch && ((t - wait_t) >= 1)){if (encoder_a_temp != encoder_a){encoder_a_pre = encoder_a;encoder_a_temp = encoder_a;encoder_switch = false;continue;}//a 0->1, b 0 Clockwise; b 1 AntiClockwiseif (encoder_a == 1){if (encoder_b == 0){steps++;}else{steps--;}}//a 1->0, b 1 Clockwise; b 0 AntiClockwiseelse{if (encoder_b == 1){steps++;}else{steps--;}}encoder_a = HAL_GPIO_ReadPin(GPIOC, EC11_A_Input_Pin);encoder_b = HAL_GPIO_ReadPin(GPIOC, EC11_B_Input_Pin);encoder_switch = false;encoder_a_pre = encoder_a;}}