как зарегистрировать отдельную функцию обратного вызова для каждого порта UART в stm32 - PullRequest
0 голосов
/ 30 апреля 2019

Я использую Freertos для программирования на STM32. Можно ли зарегистрировать отдельную функцию обратного вызова для каждого порта UART в stm32? Всякий раз, когда данные, полученные в этом порту, должны вызываться этой конкретной функцией обратного вызова после получения данных ...

Заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

В вашей функции HAL_UART_RxCpltCallback() вы можете действовать по-разному в зависимости от периферийного устройства UART.

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
  if (huart->Instance == USART1) {
    // USART1
  } else if (huart->Instance == USART2) {
    // USART2
  } else if (huart->Instance == USART3) {
    // USART3
  } else if (huart->Instance == UART4) {
    // UART4
  }
}

То же самое возможно и с HAL_UART_TxCpltCallback.

0 голосов
/ 30 апреля 2019

Да, если вы используете HAL, существует множество функций для различных обратных вызовов,

void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
void HAL_UART_AbortCpltCallback (UART_HandleTypeDef *huart);
void HAL_UART_AbortTransmitCpltCallback (UART_HandleTypeDef *huart);
void HAL_UART_AbortReceiveCpltCallback (UART_HandleTypeDef *huart);

Вы должны передать экземпляр UART_HandleTypeDef, который указывает экземпляр UART, который вы пытаетесь использовать.

...