cancel
Showing results for 
Search instead for 
Did you mean: 

USART HAL Tx Mirror on Rx

WalterE
Associate II

Hi!

I have a hardware setup with an RS485 in which all Tx Data is mirrored to Rx (no delay).

This simple example should echo all incoming chars coming from Rx back to Tx

If i do not use the delay in the callback before flushing DR the hardware mirrored Tx Data will not get flushed. - Sending one char to the Rx will end up in an endless loop of sending and receiving the same char.

So my question is:

Does HAL_UART_Transmit return before TC bit is set?

Any other explaination?

regards,

Walter

int main(void)
{
  ...
  HAL_UART_Receive_IT(&huart1, &buffer, 1);
}
 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  HAL_UART_Transmit(&huart1, &buffer, 1,0xff);
  HAL_Delay(10);
  /* If i do not use this delay  there is a possibilty, that the UART data register will be filled up by 
  the mirrored Tx data after   __HAL_UART_FLUSH_DRREGISTER 
  Open Questions regarding to this phenomenon:
  Does HAL_UART_Transmit return before TC bit is set? 
  */
  __HAL_UART_FLUSH_DRREGISTER(&huart1);
  HAL_UART_Receive_IT(&huart1, &buffer, 1);
}

0 REPLIES 0