Я делаю похитрее и посложнее: Когда надо выгребать данные из приемного буфера, то после проверки по CNDTR, если она показывает отсутствие данных - разрешаю прерывание RXNEIE и жду приема уже по прерыванию. Там есть тонкости - например, после разрешения RXNEIE надо еще раз проверить CNDTR, т.к. на интервале между первой проверкой CNDTR и разрешением RXNEIE могли прийти данные, которые тут-же схватит DMA (и сбросит флаг запроса RXNE).