Программная реализация UART позволяет организовать последовательную передачу данных на микроконтроллерах, где аппаратные порты UART недоступны. Решение базируется на использовании DMA, аппаратных таймеров и GPIO.

Для отправки байтов применяется метод двоичного ЦАП: поток битов формируется в очередь и передается через DMA. Размер отправляемого пакета должен быть кратен размеру кадра, чтобы избежать разрывов данных в линии.

Прием данных разделен на захват семплов через циклический DMA и их последующую обработку конечным автоматом. Процесс требует жесткого реального времени, так как задержка обработки массива приводит к потере данных.

Реализация требует ресурсов RAM для очередей, процессорного времени для декодирования, двух потоков DMA и до двух аппаратных таймеров. Тестирование проводилось на плате с микроконтроллером STM32F407ZGT6.