Нужно очень постараться, чтобы нагрузить системную шину так, что DMA начнет сбоить…даже если все более высокоприоритетные прерывания наложатся друг на друга.
Кстати, для своего мультипортового преобразователя USB в разные интерфейсы, я для нескольких UART'ов (насколько DMA хватило: увы, у STM32F303 с DMA очень плохо) вообще циклические буферы на прием завел. Если получаю IDLE, все пришедшее помещаю в кольцевой буфер и отмечаю флаг "пакет пришел", а пока IDLE нет, в суперлупе проверяю, что там поднакопилось, и понемногу сливаю в кольцевой буфер большего размера. И смотрю: если пришло байт не меньше размера буфера USB, либо появился флаг конца пакета, отправляю по USB. Пришедшее из USB коплю в кольцевом буфере и, когда передача по соответствующему каналу DMA окончена, заполняю его и запускаю новую передачу. Проверял на 3Мбод, пропуска символов не было. Правда, при активном трафике на всех каналах, понятное дело, уже упираемся в пропускную способность USB (около 6Мбод в "одну сторону" в моей реализации), поэтому одновременно пять последовательных портов не потянут непрерывный поток данных на больших скоростях.
Если же устройство изготавливают на какой-нибудь убогой 8-битной АВРке, понятно, скорость шины больше 19200 лучше не выставлять. А то и 9600…

