ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Среда
29 июня
1150921
VLLV (03.12.2021 14:36 - 11.12.2021 13:32, просмотров: 1855)
Периферия STM32L4 3хUART+ 3хDMA: странное поведение / updated 

Задача: Контроллер (работает на 72 МГц) должен послать пакеты данных в три UART максимально синхронно. Скорость 9600.

Реализация: через DMA

Проблема: периодически (раз в 10-15 минут) видим, что данные одновременно не уходят, если смещение есть, то оно составляет заметную долю от длительности передачи одного байта, вплоть до 1мс

Что делали: измерили длительность функции, которая готовит данные для передачи по DMA и стартует, она мизерная по сравнению со смещением. На всякий случай ставили запрет прерываний, чтобы ничто не вклинилось в процесс подготовки данных для DMA - безрезультатно.


Не можем понять, в чем может быть причина задержки. Иногда задержка между первым и вторым пакетами, иногда между вторым и третьим.


Периферия?

Косяк в коде? Какой?

============================================================================

Обновление:

1) Периферия ни при чем, всё же прерывания прерывают, а попытка их запретить была некорректной, т.к. после запрета в кишках функции засечек времени они снова разрешались. Убрали все засечки времени

2) Отдельная тема - это касательно стиля программирования без RTOS. Куча независимых драйверов со своими колбэками, или строгие вложенные автоматы состояний, обрабатываемые в свои моменты времени с фиксированным интервалом. Дас ист дер фраге. И вопрос актуален, т.к. в команде каждый тащит в свою сторону.

Ответы