是否可以使用HAL_UART_RxCpltCallback与uart建立双向通讯?

问题描述

我目前正在一个项目中,我想使用usart-1与ESP8266模块通信,并拥有另一个可用于腻子的usart-2。我的问题是,是否有可能通过HAL_UART_RxCpltCallback函数实现此目标?到目前为止,我所做的所有尝试都惨遭失败,而我能做的最好的就是建立一种可以将数据发送到esp但无法捕获任何答案的通信。我所有其他尝试都以在usart之间建立循环而告终。预先谢谢你

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

    uint8_t Data[50]; 
    uint16_t size = 0; 

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

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

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

        }

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

                HAL_UART_Transmit_IT(&huart6,(uint8_t*) RingBufferData_Tx,sizeof(RingBufferData_Tx));
                HAL_UART_Transmit_IT(&huart1,"\nSent\n\r",12);
                HAL_UART_Receive_IT(&huart6,&Received1,1);
                HAL_UART_Receive_IT(&huart1,1);
                RingBuffer_Clear(&USART_RingBuffer_Tx);
            }
            else
            {
                HAL_UART_Transmit_IT(&huart1,(uint8_t*) "Buffer is empty\n\r",17); 
                HAL_UART_Receive_IT(&huart1,1); 
            }
        }

    }
}

解决方法

HAL_UART_RxCpltCallback函数具有参数UART_HandleTypeDef * huart,因此您可以检查哪个UART实例称为此Callback。 您可以检查它是usart-1还是usart-2并根据此代码执行。