in the UART libs the UART_ClearITPendingBit() fuction has the following code : { /* Clear the specified interrupt */ UARTx->ICR &= UART_IT; } This code in my eval board give me unpredictable results :( !!! The ICR register is write only. To clear the IT bit is sufficient to write UARTx->ICR = UART_IT;