1. __enable_irq стоит для разрешения прерываний (это ёжику понятно_, а вот зачем , При входе по аппаратному RESET прерывания и так разрешены и кажется, что __enable_irq не надо, НО если сделать
__disable_irq()
NVIC_SystemReset(); // Например для вызова загрузчика (своего или системного)
то в Reset_Handler (и потом в main) попадём с запрещёнными прерываниями, поэтому начинающие (типа меня), в отличии от профессионалов, ставят __enaиle_irq(), что бы была уверенность, что прерывания разрешены.
2. На тему пустого DR под отладчиком. Если Вы поставили точку остановки на инструкцию чтения DR И при этом смотрите регистры UART, то отладчик (естественно) читает регистры UART и никто не гарантирует, что принятое значение сохранится в DR.
Я смотрел в DR при записи в него. В ту прошивку я особо не всматривался, она не моя. Я писал прошивку, где есть только инициализация юарта и прямая запись в др регистр, больше нет ничего. И др пустой, по выходу ни логический анализатор, ни компорт ничего не регистрирует