Цитата(-=TRO=- @ Dec 13 2017, 19:25)

Возможно не зная завязок и возможностей переферии я узковато мыслю, и есть более красивые решения, был бы рад услышать.
Можно взять другой МК, имеющий внешнюю 16-разрядную шину и выдавать на неё при помощи DMA требуемый поток.
А если в этом МК ещё и стоит хороший контроллер DMA, умеющий передачи "свЯзным списком", то его вообще можно запрограммировать так, чтобы он брал скажем два первых 16-битных слова с фиксированного адреса, а третье слово - из вашего кольцевого буфера.
Либо взять LPC43xx и на его SGPIO-интерфейсе (с DMA) реализовать требуемую диаграмму работы.
Цитата(DeNi @ Dec 13 2017, 19:54)

Да и с 3 каналами DMA нормальное решение от одного таймера, первый настроить только на выдачу 1, второй по буферу, третий - 0. В STM32 таймер не может управлять целым портом.
Автор не озвучил частоту выдачи. И требуемую максимальную фазовую погрешность. На высоких частотах (от МГц) такое будет работать неустойчиво.
Ещё вариант - использовать Infineon XMC4700 или XMC4800. Он имеет до 3 USIC-ов. Каждый USIC - это два последовательных порта. Которые можно запрограммировать в режим quad-SPI и получить 3*2*4 последовательных битовых потока имеющих DMA-поддержку и FIFO-буфера глубиной до 32 слов. Размер слова запрограммировать кратным 3 (например 30 бит). Данные в слове кодировать так, чтобы шли: 0, 1, 1-й информационный бит, 0, 1, 2-й информационный бит, .... . Такое решение будет работать даже на нескольких десятках МГц без проблем с очень точным выдерживанием временных интервалов.
Вобщем - на более-менее высоких частотах битового потока нормально будут работать только решения на каком-либо последовательном интерфейсе (с буферизацией).
Например - несколько параллельных quad-SPI или SGPIO.
Никакие решения на таймер+DMA+GPIO стабильно не будут работать пока процессор лазит по той же шине, где работают эти пересылки DMA->GPIO. Они будут сбивать времянку.