Mty 0 29 апреля Опубликовано 29 апреля · Жалоба Приветствую! Передаю данные в UART при помощи HAL_UART_Transmit_DMA() - все ок, но нужно понять когда закончится передача? while ( HAL_UART_GetState( &huart1 ) == HAL_UART_STATE_BUSY){} или while ( HAL_UART_GetState( &huart1 ) == HAL_UART_STATE_BUSY_TX){} Почему то не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 41 29 апреля Опубликовано 29 апреля · Жалоба HAL_UART_TxCpltCallback Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 29 апреля Опубликовано 29 апреля · Жалоба 4 hours ago, Mty said: Почему то не работает. Тут вопрос скорее не в том, почему "это" не работает, а зачем Вам DMA, если потом Вы будете ждать все в while{}? Njlf e; Тогда уж можно просто блокирующей простой передачей, и ничего ждать не надо. Правильно конечно как уже подсказали - через прерывание в конце передачи по ПДП. Можно там какой-нибудь флажок сбрасывать (а взводить его перед запуском HAL_UART_Transmit_DMA), а его уже поллить где надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 58 6 мая Опубликовано 6 мая · Жалоба Тут показано, как это работает. Включаем генерацию DMA-запросов на передачу и прерывание по TCIF (выполнение передачи) у DMA, запускаем TX UART, DMA передает заданное число байтов в модуль UART, срабатывает прерывание в DMA, в этом прерывании включаем TCIE в UARTe (можно и сразу при запуске), и ожидаем его. Это прерывание будет означать завершение передачи заданного числа байтов по UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться