hal_callback.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "stm32g4xx_hal.h"
  2. #include "hal_callback.h"
  3. #include "terminal_usartbridge.h"
  4. #include "uart_bridge.h"
  5. #include "menu.h"
  6. #include <stdio.h>
  7. #define DBG if (0)
  8. #define ENC_SOFT_FILTER_CNT 3
  9. static void encoder_handler(void);
  10. // -------------------------------------------------------------------------- //
  11. // UART //
  12. // -------------------------------------------------------------------------- //
  13. void UART_RxCpltCallback(UART_HandleTypeDef *huart);
  14. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  15. {
  16. switch((uint32_t)huart->Instance)
  17. {
  18. case USART3_BASE : // HAL USART Terminal
  19. HAL_UART_RxCpltCallbackTerminal();
  20. break;
  21. case USART2_BASE :
  22. usart_bridge_rx_cb();
  23. break;
  24. default : break;
  25. }
  26. }
  27. void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  28. {
  29. switch((uint32_t)huart->Instance)
  30. {
  31. case USART3_BASE : // HAL USART Terminal
  32. HAL_UART_RxCpltCallbackTerminal();
  33. break;
  34. case USART2_BASE :
  35. usart_bridge_rx_cb();
  36. break;
  37. default : break;
  38. }
  39. }
  40. // -------------------------------------------------------------------------- //
  41. // TIM //
  42. // -------------------------------------------------------------------------- //
  43. //
  44. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  45. {
  46. switch((uint32_t)htim->Instance)
  47. {
  48. case TIM2_BASE :
  49. encoder_handler();
  50. break;
  51. default : break;
  52. }
  53. }
  54. //
  55. static void encoder_handler(void)
  56. {
  57. static uint8_t frw_cnt = 0;
  58. static uint8_t back_cnt = 0;
  59. if (TIM2->CR1 & TIM_CR1_DIR)
  60. {
  61. if (++back_cnt > ENC_SOFT_FILTER_CNT)
  62. {
  63. menu_send_event(CONTROL_BACK);
  64. DBG printf("Encoder back\r\n");
  65. back_cnt = 0;
  66. return;
  67. }
  68. back_cnt++;
  69. }
  70. else
  71. {
  72. if (++frw_cnt > ENC_SOFT_FILTER_CNT) {
  73. menu_send_event(CONTROL_FWD);
  74. DBG printf("Encoder forward\r\n");
  75. frw_cnt = 0;
  76. return;
  77. }
  78. frw_cnt++;
  79. }
  80. }