You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.7 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "encoder.h"
  2. #include "zboard.h"
  3. #include <stdio.h>
  4. static encoder_t m_uarts[] = {
  5. {&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2}, // 相机编码器
  6. {&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2} // 从动编码器
  7. };
  8. void encoder_all_start(void)
  9. {
  10. for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++)
  11. {
  12. HAL_TIM_Encoder_Start(m_uarts[i].tim_handler, m_uarts[i].tim_channel);
  13. }
  14. }
  15. void encoder_all_stop(void)
  16. {
  17. for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++)
  18. {
  19. HAL_TIM_Encoder_Stop(m_uarts[i].tim_handler, m_uarts[i].tim_channel);
  20. }
  21. }
  22. bool encoder_clear_counter(encoder_usage_t encoder)
  23. {
  24. for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++)
  25. {
  26. if (encoder == i)
  27. {
  28. __HAL_TIM_GET_COUNTER(m_uarts[i].tim_handler) = 0;
  29. return true;
  30. }
  31. }
  32. return false;
  33. }
  34. void encoder_all_clear_counter(void)
  35. {
  36. for (uint8_t i = 0; i < (sizeof(m_uarts) / sizeof(encoder_t)); i++)
  37. {
  38. __HAL_TIM_GET_COUNTER(m_uarts[i].tim_handler) = 0; // 计数器值重新置位
  39. }
  40. }
  41. bool encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value)
  42. {
  43. bool get_encoder_value_flag = false;
  44. switch (encoder)
  45. {
  46. case CAMERA_ENCODER:
  47. *encoder_value = __HAL_TIM_GET_COUNTER(m_uarts[encoder].tim_handler);
  48. get_encoder_value_flag = true;
  49. break;
  50. case DRIVEN_ENCODER_GEAR:
  51. *encoder_value = __HAL_TIM_GET_COUNTER(m_uarts[encoder].tim_handler);
  52. get_encoder_value_flag = true;
  53. break;
  54. default:
  55. break;
  56. }
  57. return get_encoder_value_flag;
  58. }