Как подключить один и тот же поток DMA к другому каналу DMA на Cortex-M7 (STM32F746)? - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу использовать периферийные устройства SPI2 и UART4 с DMA, но, как я вижу, DMA1-SPI2-Tx и DMA1-UART4-Tx используют один и тот же поток dma.

SPI2_TX  - DMA1_Stream4 (channel 0)
UART4_TX - DMA1_Stream4 (channel 4)

Есть ли способ использоватьодин и тот же поток DMA для разных периферийных устройств одновременно?enter image description here

1 Ответ

0 голосов
/ 23 ноября 2018

Есть ли способ одновременно использовать один и тот же поток DMA для разных периферийных устройств?

Нет, это не так.Для каждого потока можно выбрать только один канал.Конечно, если вы не осуществляете передачу на оба порта одновременно, вы можете переключаться между каналами.

Использовать другой поток

Хотя кажется, чтоSPI2 TX и UART4 TX ограничены потоком 4. Можно управлять передачей каналов другими способами.

Примечание: это работает только с SPI master или UART без управления потоком .т. е. пока MCU полностью контролирует время.

Нет правила, согласно которому передача DMA должна получать доступ к тому же периферийному устройству, с которого поступил запрос (однако они должны быть на одной шине APBдля DMA1).Можно, например, использовать TIM6 (или любой другой таймер, подключенный к DMA1) для генерации периодических запросов DMA в потоке, отличном от 4, и настроить этот поток для передачи данных из памяти в SPI2->DR.

Просто установите частоту таймера для генерации запросов на обновление DMA с 1/8 битрейта SPI, запишите несколько байтов в SPI2->DR, чтобы заполнить FIFO, и запустите таймер.

Было бы сложнее сUART с различными вариантами кадрирования, но обычно он должен работать.

...