Периферия STM32L4 3хUART+ 3хDMA: странное поведение / updated Задача: Контроллер (работает на 72 МГц) должен послать пакеты данных в три UART максимально синхронно. Скорость 9600.
Реализация: через DMA
Проблема: периодически (раз в 10-15 минут) видим, что данные одновременно не уходят, если смещение есть, то оно составляет заметную долю от длительности передачи одного байта, вплоть до 1мс
Что делали: измерили длительность функции, которая готовит данные для передачи по DMA и стартует, она мизерная по сравнению со смещением. На всякий случай ставили запрет прерываний, чтобы ничто не вклинилось в процесс подготовки данных для DMA - безрезультатно.
Не можем понять, в чем может быть причина задержки. Иногда задержка между первым и вторым пакетами, иногда между вторым и третьим.
Периферия?
Косяк в коде? Какой?
============================================================================
Обновление:
1) Периферия ни при чем, всё же прерывания прерывают, а попытка их запретить была некорректной, т.к. после запрета в кишках функции засечек времени они снова разрешались. Убрали все засечки времени
2) Отдельная тема - это касательно стиля программирования без RTOS. Куча независимых драйверов со своими колбэками, или строгие вложенные автоматы состояний, обрабатываемые в свои моменты времени с фиксированным интервалом. Дас ист дер фраге. И вопрос актуален, т.к. в команде каждый тащит в свою сторону.