Я пытаюсь передать UART-передачу через DMA на stm32f405. Эта часть моего приложения предназначена для отправки текстовых строк в виде интерфейса командной строки. У меня есть часть RX UART, работающая с DMA fine (с использованием 1 байтового кругового DMA для обработки всего, что приходит), но сторона TX оказывается немного более сложной.STM32F4 HAL DMA UART TX
Я могу отправить строки данных, используя: HAL_UART_Transmit_DMA(&handle, pData[], strlen(pData))
при условии задержки между последовательными вызовами функции. Как только моя программа решит отправить две строки один за другим, новый указатель данных будет проигнорирован.
С помощью while(HAL_UART_Transmit_DMA(...) != HAL_OK){}
Я могу заставить программу подождать требуемое время и отправить последовательные строки.
Это работает некоторое время (несколько десятков переводов), а затем застревает из-за HAL_NOT_OK.
Для справки, мои настройки DMA являются: DMA2 stream 7
, channel 4
, mem to periph
, periph inc disabled
, mem inc enabled
, mem and periph align byte
, normal mode (not circular)
, low priority
, fifo disabled
.
UART установлен в 9600 baud
, 8 bit word
, 1 stop bit
, no parity
, no hw control
, 16 oversampling
.
Я пытаюсь выяснить, поможет ли мне использование FIFO, хотя я не совсем уверен, понимаю ли я его еще. Если бы я хотел отправить один байт данных, могу ли я сделать это с FIFO? есть ли ограничение на 1 слово мин?
Я установил tx complete callback
, который им в настоящее время не используется. Я действительно задавался вопросом, есть ли какие-то флаги, которые мне нужно будет очистить во время этого прерывания, но не уверены.
Любая помощь оценена!