AT
кто-то работал с usart+dma, когда длина пакета изначально не известна ?
Использовали флаг USART Idle и таймер для таймаума, если первого недостаточно?
Я idle прерывание установил, описал обработчик и запустил прием функцией с дма +idle. В хал посмотрите ее реализацию, если у вас лл.