Привет, Хабр!

Зачастую среди большинства любителей и даже профессионалов в сфере программирования микроконтроллеров STM32 очень часто возникает один и тот же вопрос, сочетающий в себе одновременно открытие новых горизонтов, душевную боль (особенно для чайников) и множество скептицизма:

А какой программатор вы используете?

Разумеется данный вопрос коснулся и Автора статьи. Сначала, сидя на табуретке, держа в одной руке стипендию, а в другой желание программировать железку, хочется начать изучение "по уму", однако жизненные факторы на раннем этапе развития заставляют себя ограничивать... Поэтому идеальный вариант — дешёвый китайский программатор ST-Link V2... Был...


Введение

В данной статье речь пойдёт о самодельном программаторе ST-Link V2.1.

Всё дело в том, что со временем приходит усталость от пользования дешёвыми китайскими программаторами ST-Link V2. У них нет поддержки SWO (Serial Wire Output), VCO (Virtual COM Port) и MSC (Mass Storage Class). Покупать оригинальный программатор ST-Link V2 совсем не тянет, тратить в 10 раз больше практически за те же возможности, что у китайского программатора, тоже не вариант.

Сущетсвует также ST-Link V3, он сомещает все те функции, которых лишён ST-Link V2. но цена его просто космос.

Подробнее см. Сравнение с аналогами.

Поэтому со временем возможно каждому приходит потребность как-то выкручиваться и делать себе модифицированный программатор. Кто-то делает ST-Link V2.1 из китайского "свистка" путём разрезания дорожек и напаивания дополнительных проводов и подтягивающего резистора, кто-то делает j-link программатор из BluePill и т.д. Можно конечно ещё себе купить DISCOVERY или NUCLEO с встроенным ST-Link V2-1 и вообще горя не знать. Это и программатор почти со всеми возможностями, и универсальная плата для разных семейств STM32. Однако снова же, цена...

Ссылки на другие статьи Хабр по модификации ST-Link V2 в версию V2.1

В связи с вышеизложенным было принято решение сделать себе полноценный, практичный и надёжный программатор ST-Link V2.1. Особенности: интерфейс SWD, функция виртуального COM-порта, поддержка SWO, функция MSC (mass storage class), низкая цена (4-5$ за плату).

Нюанс стоимости

Конечно, в реальности делать платы, это где-то 15$ за 10 штук + компоненты где-то 30-35$ на все платы, если нужно кому-то отослать по почте — ещё сверху стоимость упаковки и отправки. Если всё сложить и высчитать примерную стоимость отправки кому-нибудь в любую точку Земного шара по почте, затем разделить на 10 (кол-во плат) получим среднюю стоимость платы: 5$ с учётом того, что паять придётся самому, при желании можно отправить уже запаянную, но это дороже.

Краткий обзор оригинального ST-Link V2-1 в платах NUCLEO

Прежде чем разбирать самодельный ST-Link V2.1, взглянем на оригинальную схему принципиальную данного программатора входящего в состав платы NUCLEO и DISCOVERY:

Оригинальная схема электрическая принципиальная программатора ST-Link V2.1
Оригинальная схема электрическая принципиальная программатора ST-Link V2.1

Рассматривать схему здесь может быть неудобно, все материалы есть на GitHub.

Рассмотрим основные моменты:

  1. Собран на базе STM32F103CBT6. Версия "CB" использована потому, что у всем привычного "С8" не хватит памяти для загрузки прошивки "STM32+MSD+VCP". В дешёвый "С8" хорошо вмещается прошивка "STM32+STM8", чем успешно пользуются китайцы, делая свои дешёвые "свистки";

  2. Интерфейс программирования: SWD;

  3. Подтяжка к +D (DP) шины USB делается через транзистор. Это сделано для возможности аппаратного переподключения программатора через USB. Это обычный кусок в схеме, но китайцы им не пользуются.

  4. Использован бедный разъём micro-USB без защиты от статического напряжения (об этом позже).

В целом всё, ничего особенного за исключением отсутствия возможности отладки по SWO.

Обзор самодельного ST-Link V2.1

1. Анализ схемы электрической принципиальной

За основу схемы электрической принципиальной был взят строенный в NUCLEO ST-Link. Что-то было скопировано, что-то добавлено или модифицировано:

Самодельный ST-Link V2.1
Самодельный ST-Link V2.1

Рассматривать схему здесь может быть неудобно, все материалы есть на GitHub.

Рассмотрим отличные особенности самодельного ST-Link V2.1:

  1. Разъём USB Type C с защитой от статического напряжения (вещь маленькая и копеечная, но стоит того);

  2. Есть поддержка VCP и добавлена индикация передачи данных по линии RX, TX;

  3. Добавлены диоды Шоттки на линию +5В и +3.3В для защиты от переполюсовки. Если нужно исключить диоды и падение напряжение, параллельно им добавлены перемычки;

  4. Имеется вывод SWO на краевом разъёме (printf теперь реальность);

  5. Имеется кнопка отключения программатора от ПК по линии USB.

Сравнение с аналогами

1. Достоинства и недостатки китайского ST-Link V2

Достоинства китайского ST-Link V2:

  1. Подходит для программирования STM32 и STM8;

  2. Дешёвый и легко доступный;

  3. И всё, прикиньте.

окончены
окончены

Недостатки китайского ST-Link V2:

  1. Отсутствие вывода SWO (Serial Wire Output). Любителей использовать внутренний терминал и функцию printf() увы данный программатор сильно разочарует, а у новичков нередко данный факт вызывал желение забросить изучение такой замечательной сфере деятельности.

  2. Отсутствие выводов под UART (Universal Asynchronous Receiver Transmitter): RX и TX. Отсюда следует, что Вам не доступен VCO (Virtual COM Port) и это на самом деле крик души, ибо это надёжный и удобный способ ввода/вывода информации. Тем более, особенно когда начинающие смотрят примеры в интернете, скорее пример кода написан на HAL с использованием функции HAL_UART_Transmit() для вывода информации в терминал. Увы...

  3. Очень неудобен в использовании: программатор нужно сразу втыкать в разъём компьютера (или придётся обзавестить хорошим экранированным USB-USB удлинителем). Далее ведём китайские проводки к микроконтроллеру, по пути 100500 раз их перекрещивая, поскольку выводы на программаторе растрассированы таким образом, что нельзя взять 4 провода и провести их эстетично напрямую к отладочной плате BluePill или BlackPill, или иной другой. Почему бы китайцам не установить разъём USB Type-C на программатор, чтобы можно было подключиться через длинный уже универсальный кабель, а также сделать нормальнную трассировку своего программатора.

    "C'mon, you sell thousands of st-links from AliExpress to all over the world and you can't develop new better version? This will take about 2 hours at all, guys!"

    Random User

  4. Не оригинальный камень STM32 в 95% программаторах. Часто могут возникать проблемы с отказом ПК определить данный программатор по USB. Кроме этого китайцы часто отправляют уже бракованный программатор, не убедившись в его исправности перед отправкой. Более того, пайка и сборка корпуса данного программатора зачастую оставляет желать лучшего: может быть плохо запаен USB разъём, из-за чего при снятии металлического корпуса разъём будет болтаться, пока не оторвутся контактные площадки с дорожками.

2. Достоинства и недостатки оригинального ST-Link V2

Достоинства:

  1. Подходит для программирования STM32 и STM8;

  2. Доступно два интерфейса программирования: SWD и JTAG;

  3. Можно подключить через кабель mini-USB Type B к ПК.

Недостатки:

  1. Высокая цена (от 20$);

  2. Нет VSP, MSD и SWO.

  3. Разъём подключения mini-USB Type B без защиты от статического напряжения.

3. Достоинства и недостатки оригинального ST-Link V3

Достоинства:

  1. Подходит для программирования STM32 и STM8;

  2. Можно подключить через кабель micro-USB к ПК;

  3. Доступно два интерфейса программирования: SWD и JTAG;

  4. Доступен VCP.

Недостатки:

  1. Высокая цена (от 50$);

  2. Нет поддержки SWO;

  3. Разъём подключения micro-USB Type B без защиты от статического напряжения.

На запрос "Купить ST-Link V3 недорого" выбивиает это:

Смотреть другие источники не имеет смысла, на чип дип цена от 100$ до 200$ в других магазинах не лучше.

Прошивка программатора

На GitHub есть бутлоадер, скачиваете его и заливаете в камень через любой имеющийся ST-Link под рукой. Обновление программатора делаем по типу уже имеющихся статей на Хабр:

https://habr.com/ru/articles/442290/

Обновлени программатора
Обновлени программатора
Ожидание завершения обновления
Ожидание завершения обновления

Подведение итогов

В целом всё, все материалы есть на GitHub: схема принципиальная, гербер файлы, бутлоадер, драйвера и установочник ST-Link Utility v4.3, по схеме и фотографиям видны элементы, которые нужно установить.

Я не стал забивать статью кучей разной информацией, поскольку тема не является сложной, а по материлам на GitHub понятны особенности программатора, методика изготовления и отладки. Кроме всего я добавил файл корпуса для печати на 3Д принтере. Выглядит он так:

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

Если вам чего-то не хватает в данной статье, пишите комментарии я дополню её дополнительными главами при необходимости.

P.S. Данная статья не вышла бы, если бы не просьба моих читателей. Спасибо за вашу активность!

Комментарии (39)


  1. Sun-ami
    10.08.2023 09:20

    Кроме оригинальных ST-Link V2 и дешевых китайских ST-Link V2 без поддержки SWO бывают ещё неоригинальные китайские ST-Link V2, которые внешне ничем не отличаются от оригинальных, и SWO поддерживают, но имеют намного более простую конструкцию без буферов и защит — голый микроконтроллер, и работают гораздо менее стабильно. Зато стоят лишь немного дороже цветных "USB-свистков".


  1. SuperTEHb
    10.08.2023 09:20

    Объясните пожалуйста, почему единственный путь (других не находил) это прошить загрузчик и обновиться через утилиту именно строго определённой версии? Почему бы просто не прошить сразу нужную программу и всё?


    1. TurnipBlue
      10.08.2023 09:20

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


      1. SuperTEHb
        10.08.2023 09:20
        -1

        Что мешает сдампить уже обновлённую прошивку? Защиты от чтения не стоит.


  1. zurabob
    10.08.2023 09:20
    +3

    1. Насколько помню, основная проблема это невозможность обновления более новыми версиями и поэтому отсутствие поддержки свежих процессоров. Я переделал себе один китайский свисток, но не смог им прошивать STM32G0(или править фьюзы?). Китайцы часто ставят уже 103CB и достаточно просто порезать дорожки и подпаять провода.

    2. За 500+ рублей еще недавно на али можно было купить JLINK-OB в котором уже есть VCP и вывод SWO. Причем им можно отлаживать и прошивать почти любой мелкий ARM. Правда частота SWO всего 200кГц.

    ИМХО основное преимущество этого варианта это разъем Type-C, если работаешь не с ноута и рядом не лежит хаб, то удлинитель не очень удобно и не всегда под рукой. Остальное очень натянуто, за годы я купил себе наверно с десяток китайских ST-LINK и ни разу не столкнулся ни с глюками, ни с неисправностью нового. Штуки три сжег, из нескольких выпаял процессор(оказалось дешевле нового), несколько раздал, остальные лежат в ящиках и постоянно теряются.)


    1. Anzorik_228 Автор
      10.08.2023 09:20

      Тут по-видимому дело случая, но китайские st-link мне порядком так поднадоели, я не говорил, что они глючные, нет, работают нормально, если рабочий пришёл. Много натыкался на неисправные уже по приходу, то не определялись, то приходила странная партия таких свистков, в которых забывали пару смд резисторов по d+ d- напаять, приходилось самому. В работе они совсем неудобные...

      В общем целом им можно пользоваться, но мой опыт, основанный на статистическом методе, заставил меня уйти от этого вариата, вот уже больше года пользуюсь этим своим кастомным и не встречаю никаких проблем. Так что, смотрите сами, как вам удобнее, может мне стоило за 500 рублей, как вы говорите китайский J-Link себе купить, но пока всё хорошо


  1. ancc
    10.08.2023 09:20
    +1

    кстати V3 уже не работает с китайскими процессорами (например, Gigadevice). Кстати дома пользуюсь V2 программатором сделанным из обычной платы BluePill на stm32f103c8t6, там надо несколько элементов навесом всего.


  1. HardWrMan
    10.08.2023 09:20

    У меня есть китайские свистки. Однако я пользуюсь программатором от MikroE. Есть как проводной так и беспроводной.


  1. Polarisru
    10.08.2023 09:20

    Ну ок, не устраивает китайский программатор за 3 евро, но тратить свое время и куда больше ресурсов, чтобы повторить оригинальный программатор за 25 евро - это какой-то реально свой путь, бессмысленный и беспощадный. Я понимаю, если бы речь шла про J-Link, который стоит от 500 евро, но это уже апофеоз крохоборства.


    1. Goron_Dekar
      10.08.2023 09:20

      Ок, подскажи готовый неплохо защищённый программатор с поддержкой SWO и openocd не за 500$, богатей ты наш!


      1. vau
        10.08.2023 09:20
        +2

        Jetlink9 - весьма добротный клон за 67$. Пользуюсь ежедневно в работе и дома. Ни один пока не умер на моей памяти. Есть у них же еще более беспроблемный Jetlink Ultra V4, но ценник на 100$ побольше


      1. beefdeadbeef
        10.08.2023 09:20

        https://github.com/WeActStudio/WeActStudio.MiniDebugger

        опционально зашить туда

        https://github.com/blackmagic-debug/blackmagic

        и можно забыть об openocd


      1. Polarisru
        10.08.2023 09:20
        -1

        Извините, но при чем тут openocd в отношении ST-Link? И да, вот вам готовый программатор с поддержкой SWO: оригинальный ST-Link v2:

        Удивительно, да?


        1. Anzorik_228 Автор
          10.08.2023 09:20

          На каком пине висит swo? Можете на схеме показать? Я мог ошибиться

          Жаль, что VCO нет, SWO приятное дополнение, но скорости не очень.


    1. Anzorik_228 Автор
      10.08.2023 09:20
      +1

      Эм... В общем целом на разработку иногда после работы вечером ушёл месяц, скинулся с другом на платы и компоненты, сделали себе хорошие программаторы и вышло ещё дешевле, чем описано стоимость в статье.

      Вы чересчур предираетесь, какой программатор вы используете, тот самый J-Link может?


  1. anonymous
    10.08.2023 09:20

    НЛО прилетело и опубликовало эту надпись здесь


  1. 111djagernaut111
    10.08.2023 09:20

    Есть ещё китайский wchlink mini. На нем swd и uart. Умеет шить stm32, risc v и, возможно, ещё какие-то arm'ы


    1. Anzorik_228 Автор
      10.08.2023 09:20

      Неплохой, жаль только SWO нет


  1. ewavr
    10.08.2023 09:20

    В официальном магазине STLINK-V3MINIE $11.47

    https://estore.st.com/en/products/development-tools/hardware-development-tools/hardware-debugger-and-programmer-tools-for-stm32/stlink-v3minie.html


    1. Anzorik_228 Автор
      10.08.2023 09:20

      Это не тот, который я показывал в статье, да VCP есть, но нет других возможностей, гляньте полноценный, не MINIE, там он шире описан. + В оффициальном магазине да, он столько стоит, но можно ли его купить россиянам и белорусам к примеру с учётом текущей ситуации в мире?


      1. holomen
        10.08.2023 09:20

        swo есть, type-c есть, защита usb от статики просматривается.

        да, напрямую заказать тоже не получается, но в локальных магазинах около 1000грн (~$25)


  1. ionicman
    10.08.2023 09:20
    +1

    Я, если честно, не понял, зачем нужно SWO/VCP в программаторе?

    Т.к. любая (ну или почти любая ) ножка процессора элементарно превращается в UART либо что-либо еще аппаратно, либо битбэнгом - и выводит или вводит все, что душе угодно.

    Вирутальный COM? - да вообще без проблем - цепляешь UART к UART2USB с али за 1$ и все - можно отправлять/принимать что угодно, мало того, их можно присоеденить не один, а несколько к разным ножкам и гнать телеметрию по всем ним.

    Причем тут программатор?

    Ну или я не понимаю чего-то.


    1. SuperTEHb
      10.08.2023 09:20
      +1

      Можно. Можно ещё светодиодом сигнализировать какое-либо состояние и по мере отладки переносить зажигание светодиода в разное место программы.

      Отладчик как раз и нужен чтобы всего этого НЕ делать. То есть никак не модифицируя программу можно чуть ли не в прямом эфире смотреть значения переменных. Точки останова, опять же. Да и сам отладочный интерфейс зачастую последовательный. То есть всё то же самое, только лучше и УЖЕ сделано производителем.

      А последовательный порт? Просто удобно. Не нужно ещё одно устройство иметь и занимать ещё один порт.

      То есть это всё не про что-то совершенно уникальное и абсолютно необходимое. Это просто ещё один способ немного облегчить себе жизнь.

      Добавлено: И режим флешки туда же. На любом компьютере раздобыл файл прошивки, закинул его в микроконтроллер через CTRL+C, CTRL+V и готово. Не надо никаких утилит устанавливать, никаких программ, никаких сторонних средств и драйверов. Подключил, закинул, прошито!


      1. ionicman
        10.08.2023 09:20

        Про режим флешки я как раз ничего и не писал)


    1. Anzorik_228 Автор
      10.08.2023 09:20

      Всё просто, зачем цеплять ещё некий сторонний китайский девайс, когда всё есть в одном устройсве, которое по цене за тот же 1$ дороже будет, чем китайский свисток + максимальная скорость передачи 2000000, не все уарт-усб чипы её тянут + доступен SWO. Используя SWO можете не запускать сторонний терминал, а выводить всё в строенный viewer вашего ПО для разработки и работать в одном окне условно.

      В добавок, если имеете 3Д-принтер можно и корпус распечать себе, модель коротого чётко под такой программатор сделана, ну это так, вишенка на торте...


    1. zurabob
      10.08.2023 09:20

      SWO это еще один способ иногда выдать отладочную информацию не тормозя процессор. Можно записать до 8(16?) 32битных регистров ITM_STIMx и они будут последовательно выводится по SWO. Да, можно это же сделать с помощью UART и DMA, но это не всегда удобно и не всегда есть лишний UART.

      Когда отлаживаешь что-то небольшое или носишь домой/обратно, то очень удобно когда к твоей плате подключен только маленький свисток.

      Причем тут программатор?

      Обычно писать "программатор и внутрисхемный отладчик для процессоров STM32" не очень удобно, поэтому пишут коротко "программатор".


      1. sami777
        10.08.2023 09:20

        SWO Процессор очень даже хорошо тормозит!


    1. randomsimplenumber
      10.08.2023 09:20

      Ну или я не понимаю чего-то.

      Я тоже ;)

      Взял самый дешевый китайский свисток, поиграться в stm8. Подключается плоским шлейфом с 4 проводками прямо в плату без перекрещиваний. Пошаговая отладка в platformio через эти 4 провода работает. Программу в камень заливает. Что еще нужно от программатора?


      1. randomsimplenumber
        10.08.2023 09:20

        Ага, немного понял ;) stm8 и stm32 достаточно разные. Для stm8 свисток подходит идеально.

        https://habr.com/ru/articles/402927/ - тут допиливали SWO с помощью 2 резисторов ;)


  1. vanyas
    10.08.2023 09:20
    -1

    Оригинальный ST-Link V3 стоит $35, это цена космос???

    Собрать программатор из статьи, с заказом ПП выйдет не особо и дешевле


    1. Anzorik_228 Автор
      10.08.2023 09:20
      +1

      Всмысле? Я же показал сколько стоит такой программатор на AliExpress, смотрите скрины в статье и ссылки на другие магазины, не знаю где вы увидели 35$, может на оригинальном сайте, но если вы живёте в России или Беларуси, как я, то вряд ли у вас получится за такую цену купить. Да даже это дорого, вам в статье предалагается решение в 7 раз дешевле, а по факту ещё дешевле. Вот отрывок из статьи:

      "Собрать программатор из статьи, с заказом ПП выйдет не особо и дешевле"

      Ответ: Всмысле? Я же указал примерный ценник этого программатора, 4-5$ за плату, на доллар дороже чем китайский


  1. spa5
    10.08.2023 09:20
    +1

    Всегда радует, когда кто-то что-то делает сам. Автору +
    Автор может записать видео обзор на этот программатор?


    1. Anzorik_228 Автор
      10.08.2023 09:20

      Я попробую... В выходные может сделаю и дополню статью, размещу видео в конце статьи, следите за изменениями


  1. NutsUnderline
    10.08.2023 09:20

    в оригинальном STLink2 у меня моментально сломался разъем STM8 (белая пластмасса разъема)

    Оригинальный STLink3 хорош (но не иделен) тем что умеет шить по CAN, I2c и всякому такому нестандартному что умет делать бутлоадер на новых STM32. Так что если клонировать еще то неплохо бы это железо сделать по уму а не как сделано - мелкой платой за большие деньги.


  1. RogerRU
    10.08.2023 09:20

    Я брал на Али ST-LINK v3 MINI за 1500 руб. в 02.2022, сейчас он стоит 2500 руб. в связи с курсом.
    Работа автора хорошая, вопросов нет, но заказ только печатных плат для этого проекта +- в эти же 2500 и выйдет.


    1. Anzorik_228 Автор
      10.08.2023 09:20

      Недавно заказывал иные платы, но тот же размер, общая сумма с PCB way вышла 8,66$, на русские это сейчас вроде 866 рублей. Компоненты чуть-чуть дороже. И в итоге вы получаете не одну платку, а несколько. + Лично я когда делал этот программатор скинулся с другом и вышло прямо говоря очень дёшего, ни про какие 2500 не идёт речь


      1. RogerRU
        10.08.2023 09:20

        Ни PCBWay, ни JLCPCB не сегодняшний момент в Россию не поставляют, только через посредников с некислой наценкой. Соответственно моя цена более чем реальна, я недавно заказал 5 плат через посредников, вышло где то 2100 за всё, но это было по курсу ~80, а сейчас он уже 97. Так что...


        1. Anzorik_228 Автор
          10.08.2023 09:20

          Понятно, я живу в Беларуси, поэтому такая разница, jlc тоже не работает, но pcbway доставляет. + Плат всё же 10 штук сразу приходит


  1. NutsUnderline
    10.08.2023 09:20
    +3

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