#include "encoder.h" #include "zboard.h" #include static int Direction; static int CaptureNumber; static encoder_t m_uarts[] = { {&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2}, // 相机编码器 {&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2} // 从动编码器 }; void encoder_all_start(void) { /* 不开启会导致程序无法启动,原因未知 */ for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++) { HAL_TIM_Encoder_Start(m_uarts[i].tim_handler, m_uarts[i].tim_channel); } } void encoder_all_stop(void) { for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++) { HAL_TIM_Encoder_Stop(m_uarts[i].tim_handler, m_uarts[i].tim_channel); } } bool encoder_clear_counter(TIM_HandleTypeDef *tim_handler) { for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++) { if (tim_handler == m_uarts[i].tim_handler) { __HAL_TIM_GET_COUNTER(tim_handler) = 0; return true; } } return false; } void encoder_all_clear_counter(void) { for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++) { __HAL_TIM_GET_COUNTER(m_uarts[i].tim_handler) = 0; // 计数器值重新置位 } } void encoder_read_printf(void) { for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++) { Direction = __HAL_TIM_IS_TIM_COUNTING_DOWN(m_uarts[i].tim_handler); // 读取电机转动方向 CaptureNumber = (short)__HAL_TIM_GET_COUNTER(m_uarts[i].tim_handler); // 读取编码器数据 __HAL_TIM_GET_COUNTER(m_uarts[i].tim_handler) = 0; // 计数器值重新置位 if (CaptureNumber != 0) { printf("Encoder number:%d,Direction is %d,CaptureNumber is %d\r\n", i, Direction, CaptureNumber); } } }