А почему "printf в реальный порт и реальное время" не совместимо? Записал в uart байт и до окончания передачи можно ожидать. И даже если следующий байт уйдет не сразу, то ничего страшного. Или компиляторы пытаются весь результат вывести без разрывов?
У меня была проблема с printf (на нувотоне у меня, похоже, прерывания запрещались на это время - было заметно, при динамической индикации - не победил), поэтому и интересуюсь.
Это безусловно зависит отзадачи. Но тратить процессорное время на ожидание не совсем разумно. Собственно поэтому и используется дма, так как цпересылка байт через него не занимает это время, и у вас может одновременно передаваться лог и выполняться задача