Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 15 из 23

Тема: Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill

  1. #1
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4

    Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill

    Доброго времени суток,

    хотел поделиться своим проектом 3-x портового USB-Serial адаптера для STM32 Blue Pill (STM32F103C8T6).

    Зачем все это, есть же куча USB-Serial преобразователей на любой вкус? Во-первых, это дешево. Плата Blue Pill стоит на али порядка 120 руб. Во-вторых, много портов в одном USB устройстве. Не занимаются лишние USB порты, нет нужды использовать USB-хабы. В-третьих, реализованы управляющие сигналы, не каждый USB-Serial преобразователь это умеет. В-четвертых, это гибко уже сейчас минимальным изменением исходного кода можно переключить тип выхода, полярность сигнала и т. п., а в будущем все это будет еще проще (см. ниже). В-пятых, это предсказуемо, повторяемо и документировано. Лично я не раз натыкался на не определяющиеся и некорректно работающие преобразователи c али.

    Самое главное, мне просто самому в какой-то момент понадобилось подобное устройство, я написал прошивку и теперь хочу ей поделиться. Вдруг кому-то тоже будет полезно.

    Что реализовано:
    - 3 независимых UART;
    - поддержка аппаратного флоу контрола (RTS/CTS);
    - поддержка DTR/DSR/DCD;
    - 7 и 8 бит данных;
    - поддержка контроля четности (none, even, odd);
    - 1, 1.5, 2 стоповых бита;
    - поддержка всех стандартных скоростей;
    - поддержка нестандартных скоростей (тестировал до 921600);
    - DMA на передачу и прием;
    - не требует драйверов, используются CDC Class драйвера встроенные в ОС;
    - составное USB устройство, определяется как три COM (tty) порта;

    Тестировалось на Win 10, Linux, Mac OS.

    Выходные уровни совместимы с TTL 3.3 и 5 вольт. Все входы кроме UART2 RX и CTS толерантны к 5 вольтам.

    Маленькая ложка дегтя: по неизвестной причине, на некоторых экземплярах платы Blue Pill установлен некорректный подтягивающий резистор на USB D+. Это приводит к тому, что некоторые компьютеры эту плату не видят. А некоторые другие видят. Лечится заменой подтягивающего резистора на резистор номиналом 1.5 кОм. После этого все прекрасно работает на всех компьютерах.

    Проект с открытым исходным кодом, MIT лицензия. Нет зависимостей от HAL или любых других сторонних библиотек кроме CMSIS.

    Исходный код и собранная прошивка доступны тут: https://github.com/r2axz/bluepill-serial-monster

    Что дальше? В планах добавить возможность конфигурирования типов выходных сигналов (пушпул, открытый сток), типов подтяжки сигнальных линий (floating, up, down) и выбора полярности (active-high / active-low) без пересборки ПО и перепрошивки микроконтроллера. Это позволит более свободно применять устройство с различными схемами развязок, согласования уровней, управления реле, и т.п. Самый простой пример - CI/V интерфейс ICOM. Можно поставить тип выхода TX в открытый сток, соединить TX c RX и напрямую подключиться к CI/V интерфейсу. Все будет работать отлично.


  2. #2
    Standart Power Аватар для ER1MF
    Регистрация
    08.09.2006
    Адрес
    52 Регион
    Возраст
    55
    Сообщений
    443
    Поблагодарили
    154
    Поблагодарил
    1005
    там есть драйвера которые поддерживают в винде 3 порта? какой VID-PID используется?

  3. #3
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Цитата Сообщение от ER1MF Посмотреть сообщение
    там есть драйвера которые поддерживают в винде 3 порта? какой VID-PID используется?
    В Windows 10 все определяется автоматически и не требует установки драйверов, видно три порта. В Windows 7 я именно это устройство не тестировал, но насколько мне известно может потребоваться inf-файл который свяжет VID/PID со стандартным драйвером usbser.sys.
    Мне это было не надо, поэтому я этот inf-файл не делал. Если будет запрос в виде Issue на GitHub, то сделаю и добавлю в дистрибутив. Вроде бы это тривиальная задача.

    Теперь по VID/PID:

    VID: 0x1209
    PID: 0xFFFE

    Почему именно этот? Есть такой ресурс https://pid.codes Они абсолютно бесплатно дают VID/PID проектам с открытым исходным кодом. Мне не хотелось использовать чужой / тестовый VID/PID и поэтому я остановился на этом.

  4. #4
    Big Gun
    Регистрация
    04.12.2009
    Адрес
    Kursk
    Сообщений
    5,581
    Поблагодарили
    3654
    Поблагодарил
    3183
    Скорости переключаются ? Для каждого из трех serial порта отдельно ?

  5. #5
    Standart Power Аватар для ER1MF
    Регистрация
    08.09.2006
    Адрес
    52 Регион
    Возраст
    55
    Сообщений
    443
    Поблагодарили
    154
    Поблагодарил
    1005
    Cпасибо большое! Вы бы не могли добавить линк где покупать blue-Pill? Думается, что для тех кто не сильно знаком со слова Blue Pill будет полезно

  6. #6
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Цитата Сообщение от RA3WDK Посмотреть сообщение
    Скорости переключаются ? Для каждого из трех serial порта отдельно ?
    Именно так, порты полностью независимы. Можете смело ставить любую скорость на любом порту.

    - - - Добавлено - - -

    Цитата Сообщение от ER1MF Посмотреть сообщение
    Cпасибо большое! Вы бы не могли добавить линк где покупать blue-Pill? Думается, что для тех кто не сильно знаком со слова Blue Pill будет полезно
    Да, конечно. STM32 Blue Pill - это известная и крайне распространенная отладочная плата на микроконтроллере STM32F103C8T6. Китайские производители научились клонировать и сам STM32F103C8T6, и эту отладочную плату, поэтому она стоит крайне недорого. Продается она очень много где, я для примера приведу пару ссылок, но вообще найти вариант где купить в поисковике - дело двух минут.

    Я никаким образом не аффилирован с магазинами по ссылкам ниже:

    Купить на AliExpress: https://bit.ly/3lIKxDa
    Купить в MCU Store: https://mcustore.ru/store/arm/modul-...stm32f103c8t6/

    Существует версия платы с разъёмом USB-C. По идее все должно работать и на ней, но лично я не пробовал, поэтому утверждать не могу.

    Кроме того, плату надо прошить. Сделать это можно двумя способами. Первый способ - купить отладчик ST Link (https://bit.ly/2KcAJU1) и прошить с помощью st-flash. Второй способ - прошить с помощью любого другого преобразователя USB-Serial c TTL 3.3 / 5 уровнями. Оба способа кратко описаны в README проекта. Вообще информации по этой плате в интернете море, очень легко можно найти инструкции на русском на любой вкус.

    - - - Добавлено - - -

    Забыл сказать. Если вдруг кому-то хочется что-нибудь поменять под себя в прошивке вот прям сейчас, есть понимание того как это сделать, но нет под рукой компьютера с установленным ПО для того чтобы собрать бинарник, не отчаивайтесь Достаточно просто сделать форк репозитория в GitHub (для этого, понятно, нужно создать там аккаунт), разрешить в этом форке выполнение GitHub actions (там будет плашка с предупреждением о том, что actions отключены), внести свои изменения (можно прямо в самом GitHub) и после этого все автоматически соберется и новый бинарник будет доступен в разделе Releases.

  7. #7
    Standart Power Аватар для R3XAW
    Регистрация
    04.02.2016
    Адрес
    Обнинск
    Возраст
    59
    Сообщений
    278
    Поблагодарили
    184
    Поблагодарил
    205
    Отличная работа. Похоже вы не использовали STM32Cube и вся конфигурация была сделана вручную. Какую среду вы использовали, возможно ли вставить проект в Keil без переделок?
    73 es DX! Андрей Черный, R3XAW
    "В действительности всё не так, как на самом деле." Антуан де Сент-Экзюпери

  8. #8
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Цитата Сообщение от R3XAW Посмотреть сообщение
    Отличная работа. Похоже вы не использовали STM32Cube и вся конфигурация была сделана вручную. Какую среду вы использовали, возможно ли вставить проект в Keil без переделок?
    Спасибо за отзыв!

    Да, действительно, я не использовал STM32Cube и библиотеки HAL и LL, и вся конфигурация сделана вручную. От куба я использовал только CMSIS - это фактически набор определений для регистров периферии. Лично мне так удобнее и я ощущаю больше контроля над происходящим. Кроме того, мне просто стилистически не нравится HAL (но это чистой воды вкусовщина). А периферия у STM32 очень простая и логичная, и работать с ней одно удовольствие и без использования HAL.

    Весь проект написан в VSCode. Тут причина в том, что я пишу далеко не только под STM, и мне прям совсем не хочется лишний раз менять привычное окружение. Большая часть моих проектов на С/С++ собираются либо c помощью make, либо с помощью cmake. В VSCode были установлены следующие плагины: ARM, C/C++, Clang-Format, Cortex-Debug, markdownlint. Все это дало мне возможность вполне комфортно разрабатывать код, работало автодополнение, подсветка ошибок, отладка с пошаговым выполнением, интеграция с Git. Почти как настоящая IDE. Сборка проекта сделана с помощью make. В качестве компилятора используется arm-none-eabi-gcc, в качестве статического анализатора - cppcheck. Последний вполне себе небесполезен.

    Я почти ничего не знаю про Keil, но если он умеет импортировать makefile-based проекты, то после настройки требуемых переменных окружения все должно заработать. Насколько я нагуглил внутри Keil тоже используется gcc, поэтому он должен проглотить вот эти вот __attribute__ ((packed)) и прочую gcc-шную специфику. Не могу сказать потребуются ли какие-либо переделки. Надо пробовать. А может быть, лучшим вариантом было бы просто затащить исходники в пустой проект Keil, однажды все настроить и пользоваться. В конце-концов ничего сложного в проекте нет. Флаги компиляции можно подсмотреть в Makefile. Пробуйте.

  9. #9
    Standart Power Аватар для R3XAW
    Регистрация
    04.02.2016
    Адрес
    Обнинск
    Возраст
    59
    Сообщений
    278
    Поблагодарили
    184
    Поблагодарил
    205
    VSCode хороший выбор если нужно писать для Linux или Android. В Keil удобная отладка и сама среда. Ближе к выходным будет время попробую.
    73 es DX! Андрей Черный, R3XAW
    "В действительности всё не так, как на самом деле." Антуан де Сент-Экзюпери

  10. #10
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Цитата Сообщение от R3XAW Посмотреть сообщение
    VSCode хороший выбор если нужно писать для Linux или Android. В Keil удобная отладка и сама среда. Ближе к выходным будет время попробую.
    А, совсем забыл, тут дело еще в том, что я почти все время работаю под маком. А Keil требует Windows. Ну то есть можно, конечно, поставить parallels, но это не соответствует моим представлениям об удобстве Мне правда хватает тех возможностей которые мне дает отладка в VS Code. Да что там, мне в принципе и в командной строке gdb норм) Я не особо требователен...

  11. #11
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Важно. Тестирование на Windows 7 и Windows 8 действительно показало необходимость создания inf-файла. Без него не работает. Об этом сообщил LY1CE создав Issue на GitHub. За что ему огромное спасибо. В скором времени сделаю inf-файл.

  12. #12
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Цитата Сообщение от ER1MF Посмотреть сообщение
    там есть драйвера которые поддерживают в винде 3 порта? какой VID-PID используется?
    Для Windows младше Windows 10 все таки пришлось сделать INF файл. C ним вроде как должно все работать на WinXP, Win7 и Win8. Если вдруг есть возможность и желание протестировать, то буду крайне признателен.

    Тестовый архив с inf-файлом тут: https://github.com/r2axz/bluepill-se...576273/inf.zip

    Сам драйвер пока подписан самоподписанным сертификатом, поэтому винда в общем случае будет немного ругаться. Но по-идее ее можно уговорить.

  13. #13
    Big Gun
    Регистрация
    04.12.2009
    Адрес
    Kursk
    Сообщений
    5,581
    Поблагодарили
    3654
    Поблагодарил
    3183
    Да, упустил я в свое время STM . Так и остался на AVR, да еще и ассемблер предпочитаю. Теперь читаю про ARM, C/C++, Clang-Format, Cortex-Debug, markdownlint - темный лес, только Keil-ом пользовался, когда для 8051 программы писал.
    По мне проще FT232RL и AVR за ним (что я и делаю) http://ra3wdk.qrz.ru/LowBandDX/inject_new.jpg
    А если надо несколько портов - ставлю USB HUB to 3 COM от TI - по цене получается дороже, чем STM, но в железе гарантированно без сбоев работает на всех документированных скоростях.
    Это я больше для своего оправдвания пишу

  14. #14
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Цитата Сообщение от RA3WDK Посмотреть сообщение
    Да, упустил я в свое время STM . Так и остался на AVR, да еще и ассемблер предпочитаю. Теперь читаю про ARM, C/C++, Clang-Format, Cortex-Debug, markdownlint - темный лес, только Keil-ом пользовался, когда для 8051 программы писал.
    По мне проще FT232RL и AVR за ним (что я и делаю) http://ra3wdk.qrz.ru/LowBandDX/inject_new.jpg
    А если надо несколько портов - ставлю USB HUB to 3 COM от TI - по цене получается дороже, чем STM, но в железе гарантированно без сбоев работает на всех документированных скоростях.
    Это я больше для своего оправдвания пишу
    Так под STM тоже можно Keil-ом пользоваться. Это просто у меня специфические вкусы по поводу среды разработки. Я далек от мысли что они единственно верные или удобные для всех.

    На AVR, кстати, можно вполне себе делать проекты с нативным USB и обойтись без дополнительных преобразователей. Более того, там для этого есть прекрасная LUFA (Four Walled Cubicle - LUFA (Formerly MyUSB)) с отличным API, документацией и примерами.

    Про USB HUB to 3 COM от TI не знал. И что-то не смог сходу нагуглить. Но если это преобразователь USB в три COM порта, то и хорошо что не знал. А то этот проект мог бы и не появиться На счет стабильной работы на разных скоростях, то судя по многочисленным тестам, у меня все с этим хорошо.

  15. #15
    QRP
    Регистрация
    16.11.2020
    Сообщений
    14
    Поблагодарили
    19
    Поблагодарил
    4
    Ну и про гибкость не надо забывать. Можно ли покупные USB-Serial преобразователь заставить инвертировать управляющие сигналы на вход и выход? Чаще всего, нет! Можно ли переключить выход в режим открытого стока? Тоже нет. Можно ли изменить тип подтяжки линии (вверх, вниз, или вообще без подтяжки)? Опять нет. А все эти мелочи заметно упрощают использование.

Похожие темы

  1. Ответов: 20
    Последнее сообщение: 15.03.2016, 17:57
  2. Регистрация на Фестиваль "Харьковские встречи",с 3 по 5 июня 2011
    от KI6EEO в разделе Клубы, обьединения, слёты
    Ответов: 2
    Последнее сообщение: 17.04.2011, 17:52
  3. Как определить UART(RS232) на плате
    от MavRock в разделе Радиолюбительские технологии
    Ответов: 13
    Последнее сообщение: 09.12.2010, 20:12
  4. 3 элемента YAGI на 14 MHz
    от UA3GFX в разделе Антенны КВ
    Ответов: 21
    Последнее сообщение: 11.10.2010, 11:42
  5. Антенна 3 эл. дельта на 80 м
    от UA9XGY в разделе Антенны КВ
    Ответов: 9
    Последнее сообщение: 28.04.2008, 17:32

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×
Рейтинг@Mail.ru
eXTReMe Tracker


Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×