Цитата(Tanker @ May 3 2012, 01:17)

В общем надеюсь с вашей помощь найти решение своего трабла и увековечить тему "STM32 DMA UART" в FAQ опубликовав полученный рабочий код с каментами
По поводу глюка с последними байтами при передаче через DMA, есть ньюанс. У DMA флаг TCIF выставляется когда последний байт буфера записан в регистр DR усарта. При этом выдача этого байта самим усартом ещё не закончена. Поэтому переводить 485й в приём рано. Для переключения 485 в приём используйте флаг USART_CR1_TCIE, он выставится когда последний байт полностью передан.
Отсчитывать время окончания фрейма отдельным таймером необязательно, можно использовать флаг IDLE усарта.
В остальном логика работы верная. Единственное, я никогда не заморачивался с временем переключения драйвера 485, всегда работал с ним сразу после переключения. Ну и по поводу глюков при работе по прерываниям с 2 портами - всё же где то ваш косяк, не знаю при приёме или при передаче, но вариант с работой по прерываниям должен прекрасно работать.
Загляните в мою недавнюю тему про USART+DMA, там и приём и передача сделаны с DMA (правда для FreeRTOS, но смысл понять можно).
Сообщение отредактировал athlon64 - May 3 2012, 03:15