Цитата
Потому что USART в синхронном режиме , как SPI. Передача байта происходит одновременно с приёмом.
ну то есть у вас все хорошо работает

?
if RXNE=0, then it means that the last valid data has already been read and thus there
is nothing to be read in the RDR. This case can occur when the last valid data is read in
the RDR at the same time as the new (and lost) data is received. It may also occur
when the new data is received during the reading sequence (between the USART_SR
register read access and the USART_DR read access).
вижу много причин пропадания этого флага... кстати если у вас в отладке где то просматривается RDR, то это тоже наверняка может сбросить флаг....
Почему не использовать идеологически более правильный флаг TC - Transmission complete?