Ищи у себя ошибки. Задача непрерывного приема и выдачи данных решается на STM достаточно изящно. Вот проверенный рецепт: 1. Прием данных организуешь в кольцевой буфер по DMA в кольцевом режиме. Один раз настроил и забил. Прерывания не нужны.
2. Обработку данных выполняешь по мере надобности/возможности, главное чтобы за время между обработками данные в буфере приема не наложились.
3. Размер принятых за время от предыдущей обработки данных определяешь по указателю на последние обработанные данные и по регистру DMA->CNDTR. Обрабатываешь блок, корректируешь указатель. Цикл закончен.