hal_callback.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 "config.h"
  7. #include <stdio.h>
  8. #define DBG if (0)
  9. static void encoder_handler(void);
  10. // -------------------------------------------------------------------------- //
  11. // EXTI //
  12. // -------------------------------------------------------------------------- //
  13. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  14. {
  15. static uint32_t delay_cnt = 0;
  16. static bool push_flag = false;
  17. if (GPIO_Pin == GPIO_PIN_4)
  18. {
  19. if (push_flag == false) {
  20. push_flag = true;
  21. delay_cnt = HAL_GetTick();
  22. }
  23. if (push_flag == true) {
  24. if ((HAL_GetTick() - delay_cnt) > BUTTON_GLICH_TIMEOUT) {
  25. push_flag = false;
  26. DBG HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
  27. menu_send_event(CONTROL_PUSH);
  28. }
  29. }
  30. }
  31. }
  32. // -------------------------------------------------------------------------- //
  33. // UART //
  34. // -------------------------------------------------------------------------- //
  35. void UART_RxCpltCallback(UART_HandleTypeDef *huart);
  36. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  37. {
  38. switch((uint32_t)huart->Instance)
  39. {
  40. case USART3_BASE : // HAL USART Terminal
  41. HAL_UART_RxCpltCallbackTerminal();
  42. break;
  43. case USART2_BASE :
  44. usart_bridge_rx_cb();
  45. break;
  46. default : break;
  47. }
  48. }
  49. void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  50. {
  51. switch((uint32_t)huart->Instance)
  52. {
  53. case USART3_BASE : // HAL USART Terminal
  54. HAL_UART_RxCpltCallbackTerminal();
  55. break;
  56. case USART2_BASE :
  57. usart_bridge_rx_cb();
  58. break;
  59. default : break;
  60. }
  61. }
  62. // -------------------------------------------------------------------------- //
  63. // TIM //
  64. // -------------------------------------------------------------------------- //
  65. //
  66. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  67. {
  68. switch((uint32_t)htim->Instance)
  69. {
  70. case TIM2_BASE :
  71. encoder_handler();
  72. break;
  73. default : break;
  74. }
  75. }
  76. //
  77. static void encoder_handler(void)
  78. {
  79. static uint8_t frw_cnt = 0;
  80. static uint8_t back_cnt = 0;
  81. if (TIM2->CR1 & TIM_CR1_DIR)
  82. {
  83. if (++back_cnt > ENC_SOFT_FILTER_CNT)
  84. {
  85. menu_send_event(CONTROL_BACK);
  86. DBG printf("Encoder back\r\n");
  87. back_cnt = 0;
  88. return;
  89. }
  90. back_cnt++;
  91. }
  92. else
  93. {
  94. if (++frw_cnt > ENC_SOFT_FILTER_CNT) {
  95. menu_send_event(CONTROL_FWD);
  96. DBG printf("Encoder forward\r\n");
  97. frw_cnt = 0;
  98. return;
  99. }
  100. frw_cnt++;
  101. }
  102. }