Трёхпортовый USB-UART адаптер на МК STM32F103C8

Как-то раз, отлаживая одно из устройств на микроконтроллере, мне понадобилось логировать большие объёмы данных по линиям RX/TX UART интерфейса между микроконтроллером и периферийным устройством. Так как нужно было смотреть обе линии (RX и TX) одновременно, на первое время я взял два простеньких USB-UART адаптера на чипе PL2303. Отладка шла хорошо, но два UART-адаптера занимали 2 USB порта, и ещё 2 порта занимал отладчик с беспроводной мышью. И тут я подумал, что неплохо было бы обзавестись USB-UART адаптером, имеющим сразу несколько UART интерфейсов. Поиск в гугле привёл меня к замечательной статье от автора R2AXZ, который написал прошивку и реализовал USB-UART адаптер c тремя UART интерфейсами на основе «народной» отладочной платы «BluePill» с микроконтроллером STM32F103C8 на борту. Идея очень заинтересовала меня. Я прошил имеющуюся у меня плату «BluePill», и в одно мгновение получил 3 UART интерфейса, работающих через 1 USB порт.

Адаптер оказался настолько удобным, что я решил развести под него плату и оформить в виде законченного устройства, чтобы иметь такой полезный девайс у себя в лаборатории. Разумеется, ни одно устройство, которое я не делаю, не обходится без доработок, поэтому добавив немного обвязки, получилась вот такая схема:

Из доработок я добавил ESD-стабилитроны для защиты от статики, удобный USB разъём, светодиодную индикацию работы всех трёх линий UART, возможность выбора напряжения логических уровней UART. Напряжение выбирается при помощи джампера, доступны фиксированные напряжения: 1,8В; 3,3В; 5В. Также предусмотрена установка произвольного напряжения в диапазоне 1,65В — 5В, при этом джампер выбора напряжения необходимо снять, а напряжение с отлаживаемого устройства подать на UART адаптер для питания согласующих буферов. В устройстве задействованы только линии RX и TX, поэтому используется программное управление потоком.

Внешний вид платы в процессе разработки:

Платы после монтажа компонентов, промываем от остатков флюса в ультразвуковой ванне:

После промывки плат необходимо прошить микроконтроллеры. Залить прошивку можно двумя способами. Первый способ — прошить через SWD интерфейс, используя внешний программатор-отладчик «ST-Link» либо «J-Link». Для подключения программатора на плате предусмотрен разъём XP3. Второй способ — прошить через внешний UART-адаптер, используя аппаратный загрузчик STM32. Для этого необходимо установить перемычку между пинами 3-4 разъёма XP4, затем отключить/подключить питание платы, при этом микроконтроллер перейдёт в режим загрузчика. Далее необходимо выбрать напряжение логических уровней UART при помощи джампера на разъёме XP1, подключить внешний UART-адаптер к интерфейсу UART1 на разъёме XP1, и залить прошивку через программу «FlashMagic». После заливки прошивки, микроконтроллер продолжает находиться в режиме загрузчика. Чтобы вернуть его в рабочий режим, необходимо снять перемычку между пинами 3-4 разъёма XP4, и снова отключить/подключить питание платы. Актуальную версию прошивки можно найти на странице автора.

В процессе изготовления устройства больше всего времени ушло на подбор подходящего корпуса. Хотелось, чтобы конструкция была удобной в использовании, имела надёжные (а не одноразовые Micro-USB) разъёмы, и т.д. В качестве корпуса я использовал модель «BOX-G025» от производителя «Мастеркит». Корпус вмещает разъём IDC-20 в ширину и разъём USB-B в высоту, при этом внутри остаётся достаточно места для размещения платы с множеством компонентов.

После изготовления плат выяснилось, что я забыл сделать вырезы по углам, необходимые для корректной установки платы в корпус. Пришлось сделать вырезы при помощи напильника. Для желающих повторить конструкцию, в конце статьи будут прикреплены все необходимые файлы, включая архив с gerber-файлами для заказа плат и BOM-файл для заказа компонентов. В последней версии платы вырезы по углам на плате уже добавлены.

Печатная плата адаптера, вид сверху:

Вид снизу:

Печатная плата имеет «нестандартную» толщину 1,2 мм. Это сделано для того, чтобы плата полностью погружалась в нижнюю половинку корпуса (и не выступала за её пределы), а интерфейсные разъёмы располагались ровно в верхней половинке корпуса.

Светодиоды применил не обычные 3-миллиметровые, а пафосные, диаметром 2 мм. Они имеют цилиндрическую форму и плоскую поверхность на кончике, при этом отлично смотрятся на плоскости корпуса. Чтобы ровно выставить светодиоды по высоте, я смонтировал их на пластиковых стойках.

Внешний вид адаптера после сборки корпуса:

Чтобы подписать распиновку разъёма и назначение светодиодных индикаторов, я напечатал стикеры на обычной бумаге, покрыв её слоем канцелярского скотча. Затем аккуратно вырезал стикеры по контуру и приклеил их к корпусу.

Справа расположен джампер для выбора напряжения логических уровней UART.

После подключения UART-адаптера к компьютеру, при использовании ОС Windows 7 и ниже, необходимо установить драйвера. При использовании ОС Windows 10 установка драйверов не требуется.

Адаптер получился надёжным и удобным в использовании.
Выражаю благодарность автору и разработчику прошивки — R2AXZ, спасибо!