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

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

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


person Vignesh    schedule 30.04.2019    source источник


Ответы (2)


В вашей 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.

person aep    schedule 02.05.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, который вы пытаетесь использовать.

person ched    schedule 30.04.2019
comment
Да @ched, я использую только HAL, и мне нужна только функция HAL_UART_RxCpltCallback ... И ... Я имел в виду отдельную функцию HAL_UART_RxCpltCallback индивидуально для каждого порта UART, например HAL_UART_RxCpltCallback1 () для uart1, HAL_UART_RxCpltCallback2 () для uart1 и HAL_UART_RxCplt_ARTCallback2 () для uart1 ..Является ли это возможным? - person Vignesh; 30.04.2019
comment
Да, ты можешь это сделать. UART_HandleTypeDef позволяет указать, какой экземпляр UART вы хотите использовать. - person ched; 30.04.2019