问题描述
我目前正在一个项目中,我想使用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并根据此代码执行。