Реклама ⓘ
Главная » Компьютерная электроника
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Трёхпортовый 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, спасибо!

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 09.10.2022 0 1
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (21) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
BARS_ #
Отличный девайс получился. Да и схема продумана очень хорошо. Единственно нет ничего о характеристиках самого UART. Какова максимальная скорость обмена?
Ответить
0

[Автор]
Zlodey #
По комментариям автора прошивки, максимальная скорость каждого UART около 2 МБод. Судя по всему, обусловлено скоростью USB в STM32F103 (HighSpeed, 12 МБит/с).
TX 2 МБод + RX 2 МБод = 4 МБод на один UART, умножить на 3 интерфейса.
Ответить
0
r2axz #
Было бы неплохо, если бы это было действительно так. На самом деле существует еще огромная куча накладных расходов на всевозможных уровнях. Если вкратце, то есть два не слишком связанных между собой понятия:

Максимальный скорость порта (baud rate), которая для первого uart - 4.500000 MBaud, для остальных 2.25 MBaud, и это связано с ограничениями самой stm32f103. В документации для простоты указано: “Supports all baud rates up to 2 MBaud”

Кроме этого, есть понятие максимальной пропускной способности. Тут как раз включаются всякие бутылочные горлышки. Так вот она для каждого порта составляет примерно 1 - 1.5 Мбит, точнее вот прям сейчас не скажу. Зависит от разного, в том числе от хоста.

Может показаться, что это как-то немного, но если верить тестам тут, то это быстрее CH340, FT232RL, CP2102N плюс-минус одно и то же с CP2104, но помедленнее FT230X, CP2102 (не N).
Ответить
0
BARS_ #
Судя по форумам, UART у STM32 спокойно работает на 4 МБит. Опять же, редко когда передают сплошной поток данных. Обычно работа идет в пакетном режиме.
Ответить
0
r2axz #
Так и есть, на stm32f103c8t6 USART1 действительно прекрасно работает на скоростях до 4.5 MBaud включительно, а вот USART2 и USART3 уже только на скоростях до 2.25 MBaud включительно. Они там тактируются от разных клоков, поэтому и максимальные скорости разные.

Но дело совсем не в этом: эти данные ведь еще надо по USB принять/передать, переложить, там в usb packet memory, дождаться пока хост их заберет, вот это все. Поэтому в итоге пропускная способность меньше.

Понятие "обычно" - штука зыбкая: хорошо если обычно в пакетном режиме, но закладываться что так будет всегда было бы слишком оптимистично.

Фраза "В документации для простоты указано: “Supports all baud rates up to 2 MBaud" - это из доки на bluepill-serial-monster, а не из доки на stm32.

А вообще, на высоких скоростях обмена, следует все таки при возможности использовать аппаратный контроль потока: мало ли когда хост решит затупить... Это если потери критичны, конечно.
Ответить
0

[Автор]
Zlodey #
Интересно получается... На высоких скоростях всё зависит не просто от UART STM, а от связки UART-USB-хост
Хотя в реальной жизни мне пока не приходилось использовать скорости больше 460к.
Ответить
0
BARS_ #
Ну таки если это именно UART, то Rx и Tx не могут работать одновременно, а значит скорость должна быть около 4.
Ответить
0

[Автор]
Zlodey #
Почему одновременно не могут работать? Буферы у них раздельные, по прерываниям замечательно принимаются данные по линии RX в процессе передачи данных по линии TX.
UART - Universal Asynchronous Receiver Transmitter, слово "асинхронный" как бы намекает о том, что приём и передача могут происходить независимо друг от друга.
Ответить
0
BARS_ #
Да, вы правы, затупил. Только вот принимать данные UART STM32 по прерыванию невероятно глупая затея. Есть ведь DMA и событие IDLE, которое сообщает об окончании данных на линии RX. Т.е. прерывание дергается один раз на пакет данных.
Ответить
0

[Автор]
Zlodey #
С прерываниями это я привёл пример асинхронной и одновременной работы приёмника и передатчика UART. А как забирать данные - это уже другой вопрос. Конечно же, забирать данные через DMA будет рациональнее, особенно при работе UART на высоких скоростях.
Ответить
0
BARS_ #
Ну так DMA как раз и даст асинхронную работу
Ответить
0
Андрей Поздеев #
В винде СОМ порта 3шт появляется ?
У FT как-то микру использовал она дает два порта и имеет два входа, до 2Мбит проверял работает, может и выше не проверял.
Девайс прикольный, но я бы пошел и купил usb-hub . PL2303 не очень люблю у меня они отваливаются почему-то при долгой работе, предпочитаю CP2102
Ответить
0
r2axz #
Да, в ОС (не только в Win), устройство видно как три отдельных последовательных порта.
Ответить
0

[Автор]
Zlodey #
Я собрал ещё один вариант USB-UART адаптера - на микросхеме FT2232D. Статья сейчас находится на модерации и скоро будет опубликована.
Ответить
0
r2axz #
Интересно потестить как они друг с другом будут работать
Ответить
0
BARS_ #
Сюда бы еще добавить приемо-передатчики RS....
Ответить
0
Grigoriy Glebov #
При отладке такой девайс весьма полезен.
Ответить
+2
Dima #
Асинхронный - это без использования тактовых импульсов.
Ответить
0

[Автор]
Zlodey #
Благодарю за уточнение
Ответить
0
Alexvas #
Вот бы такое же для i2c. А то плата на 2112 очень дорогая.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

МиниПК MK809V - 4 ядра, Android 4.4.2
МиниПК MK809V - 4 ядра, Android 4.4.2
Регулятор мощности 2 кВт Программатор Pickit3
вверх