According to STM32 Manual, the USART RXNE flag will be clear automatically after read to the USART_DR register[1], so the call to USART_ClearITPendingBit is unnecessary. [1]: See RM0090 Reference Manual p.992, Bit 5