Есть ли возможность создать двустороннюю связь с uarts с помощью HAL_UART_RxCpltCallback?

#c #callback #stm32 #usart

#c #обратный вызов #stm32 #usart

Вопрос:

В настоящее время я работаю над проектом, в котором я хочу взаимодействовать с модулем ESP8266 с помощью usart-1 и иметь другой usart-2, который можно было бы использовать в putty. Мой вопрос в том, есть ли какая-либо возможность достичь этой цели с помощью функции HAL_UART_RxCpltCallback? До сих пор все мои попытки сделать это с треском провалились, и лучшее, что я мог, — это создать связь, при которой данные могут быть отправлены в esp, но ответ не может быть получен. Все мои другие попытки закончились созданием цикла между usarts. Заранее благодарю вас

 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

    uint8_t Data[50]; 
    uint16_t size = 0; 

    size = sprintf(Data, "%c", Received);

    if(Received != 'r' amp;amp; Received != 'n')
    {
        RingBuffer_PutChar(amp;USART_RingBuffer_Tx, Received);

        HAL_UART_Transmit_IT(amp;huart1, Data, size); 
        HAL_UART_Receive_IT(amp;huart1, amp;Received, 1); 
    }
    else
    {
        if(Received == 'n')
        {
            //size = sprintf(Data, "nr", 2);
            HAL_UART_Transmit_IT(amp;huart1,(uint8_t*) "nr", 2); 
            HAL_UART_Receive_IT(amp;huart1, amp;Received, 1); 

        }

        if(Received == 'r')
        {
            if(!RingBuffer_IsEmpty(amp;USART_RingBuffer_Tx))
            {
                RingBuffer_PutChar(amp;USART_RingBuffer_Tx, 'r');
                RingBuffer_PutChar(amp;USART_RingBuffer_Tx, 'n');

                HAL_UART_Transmit_IT(amp;huart6, (uint8_t*) RingBufferData_Tx, sizeof(RingBufferData_Tx));
                HAL_UART_Transmit_IT(amp;huart1, "nSentnr", 12);
                HAL_UART_Receive_IT(amp;huart6, amp;Received1, 1);
                HAL_UART_Receive_IT(amp;huart1, amp;Received, 1);
                RingBuffer_Clear(amp;USART_RingBuffer_Tx);
            }
            else
            {
                HAL_UART_Transmit_IT(amp;huart1,(uint8_t*) "Buffer is emptynr", 17); 
                HAL_UART_Receive_IT(amp;huart1, amp;Received, 1); 
            }
        }

    }
}
  

Ответ №1:

Функция HAL_UART_RxCpltCallback имеет параметр UART_HandleTypeDef *huart, поэтому вы можете проверить, какой экземпляр UART вызвал этот обратный вызов. Вы можете проверить, является ли это usart-1 или usart-2, и выполнить код в соответствии с этим.