Доброго времени суток,
хотел поделиться своим проектом 3-x портового USB-Serial адаптера для STM32 Blue Pill (STM32F103C8T6).
Зачем все это, есть же куча USB-Serial преобразователей на любой вкус? Во-первых, это дешево. Плата Blue Pill стоит на али порядка 120 руб. Во-вторых, много портов в одном USB устройстве. Не занимаются лишние USB порты, нет нужды использовать USB-хабы. В-третьих, реализованы управляющие сигналы, не каждый USB-Serial преобразователь это умеет. В-четвертых, это гибко, можно переключить тип выхода, полярность сигнала и тип подтяжки. В-пятых, это предсказуемо, повторяемо и документировано. Лично я не раз натыкался на не определяющиеся и некорректно работающие преобразователи c али.
Что реализовано:
- 3 независимых последовательных порта;
- поддержка аппаратного flow control (RTS/CTS);
- поддержка DTR/DSR/DCD;
- 7 и 8 бит данных;
- поддержка контроля четности (none, even, odd);
- 1, 1.5, 2 стоповых бита;
- поддержка всех стандартных скоростей;
- поддержка нестандартных скоростей (тестировал до 921600);
- DMA на передачу и прием;
- не требует драйверов, используются CDC Class драйвера встроенные в ОС;
- составное USB устройство, определяется как три COM (tty) порта;
- подписанные INF файлы для Win XP, 7, 8 (не требуется для Win 10);
- встроенный командный шелл для настройки параметров сигнальных линий;
Тестировалось на Win XP, 7, 8, 10, Linux, Mac OS.
Выходные уровни совместимы с TTL 3.3 и 5 вольт. Все входы кроме UART2 RX и CTS толерантны к 5 вольтам.
В версии 2.0.0 добавлена возможность конфигурирования типов выходных сигналов (пушпул, открытый сток), типов подтяжки сигнальных линий (floating, up, down) и выбора полярности (active-high / active-low) без пересборки ПО и перепрошивки микроконтроллера. Это позволит более свободно применять устройство с различными схемами развязок, согласования уровней, управления реле, и т.п. Самый простой пример - CI/V интерфейс ICOM. Можно поставить тип выхода TX в открытый сток, соединить TX c RX и напрямую подключиться к CI/V интерфейсу. Все будет работать отлично.
Маленькая ложка дегтя: по неизвестной причине, на некоторых экземплярах платы Blue Pill установлен некорректный подтягивающий резистор на USB D+. Это приводит к тому, что некоторые компьютеры эту плату не видят. А некоторые другие видят. Лечится заменой подтягивающего резистора на резистор номиналом 1.5 кОм. После этого все прекрасно работает на всех компьютерах.
Проект с открытым исходным кодом, MIT лицензия. Нет зависимостей от HAL или любых других сторонних библиотек кроме CMSIS.
Исходный код и собранная прошивка доступны тут: https://github.com/r2axz/bluepill-serial-monster