Привет, Хабр!
Зачастую среди большинства любителей и даже профессионалов в сфере программирования микроконтроллеров 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:
Рассматривать схему здесь может быть неудобно, все материалы есть на GitHub.
Рассмотрим основные моменты:
Собран на базе STM32F103CBT6. Версия "CB" использована потому, что у всем привычного "С8" не хватит памяти для загрузки прошивки "STM32+MSD+VCP". В дешёвый "С8" хорошо вмещается прошивка "STM32+STM8", чем успешно пользуются китайцы, делая свои дешёвые "свистки";
Интерфейс программирования: SWD;
Подтяжка к +D (DP) шины USB делается через транзистор. Это сделано для возможности аппаратного переподключения программатора через USB. Это обычный кусок в схеме, но китайцы им не пользуются.
Использован бедный разъём micro-USB без защиты от статического напряжения (об этом позже).
В целом всё, ничего особенного за исключением отсутствия возможности отладки по SWO.
Обзор самодельного ST-Link V2.1
1. Анализ схемы электрической принципиальной
За основу схемы электрической принципиальной был взят строенный в NUCLEO ST-Link. Что-то было скопировано, что-то добавлено или модифицировано:
Рассматривать схему здесь может быть неудобно, все материалы есть на GitHub.
Рассмотрим отличные особенности самодельного ST-Link V2.1:
Разъём USB Type C с защитой от статического напряжения (вещь маленькая и копеечная, но стоит того);
Есть поддержка VCP и добавлена индикация передачи данных по линии RX, TX;
Добавлены диоды Шоттки на линию +5В и +3.3В для защиты от переполюсовки. Если нужно исключить диоды и падение напряжение, параллельно им добавлены перемычки;
Имеется вывод SWO на краевом разъёме (printf теперь реальность);
Имеется кнопка отключения программатора от ПК по линии USB.
Сравнение с аналогами
1. Достоинства и недостатки китайского ST-Link V2
Достоинства китайского ST-Link V2:
Подходит для программирования STM32 и STM8;
Дешёвый и легко доступный;
И всё, прикиньте.
Недостатки китайского ST-Link V2:
Отсутствие вывода SWO (Serial Wire Output). Любителей использовать внутренний терминал и функцию printf() увы данный программатор сильно разочарует, а у новичков нередко данный факт вызывал желение забросить изучение такой замечательной сфере деятельности.
Отсутствие выводов под UART (Universal Asynchronous Receiver Transmitter): RX и TX. Отсюда следует, что Вам не доступен VCO (Virtual COM Port) и это на самом деле крик души, ибо это надёжный и удобный способ ввода/вывода информации. Тем более, особенно когда начинающие смотрят примеры в интернете, скорее пример кода написан на HAL с использованием функции HAL_UART_Transmit() для вывода информации в терминал. Увы...
-
Очень неудобен в использовании: программатор нужно сразу втыкать в разъём компьютера (или придётся обзавестить хорошим экранированным 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
Не оригинальный камень STM32 в 95% программаторах. Часто могут возникать проблемы с отказом ПК определить данный программатор по USB. Кроме этого китайцы часто отправляют уже бракованный программатор, не убедившись в его исправности перед отправкой. Более того, пайка и сборка корпуса данного программатора зачастую оставляет желать лучшего: может быть плохо запаен USB разъём, из-за чего при снятии металлического корпуса разъём будет болтаться, пока не оторвутся контактные площадки с дорожками.
2. Достоинства и недостатки оригинального ST-Link V2
Достоинства:
Подходит для программирования STM32 и STM8;
Доступно два интерфейса программирования: SWD и JTAG;
Можно подключить через кабель mini-USB Type B к ПК.
Недостатки:
Высокая цена (от 20$);
Нет VSP, MSD и SWO.
Разъём подключения mini-USB Type B без защиты от статического напряжения.
3. Достоинства и недостатки оригинального ST-Link V3
Достоинства:
Подходит для программирования STM32 и STM8;
Можно подключить через кабель micro-USB к ПК;
Доступно два интерфейса программирования: SWD и JTAG;
Доступен VCP.
Недостатки:
Высокая цена (от 50$);
Нет поддержки SWO;
Разъём подключения 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)
SuperTEHb
10.08.2023 09:20Объясните пожалуйста, почему единственный путь (других не находил) это прошить загрузчик и обновиться через утилиту именно строго определённой версии? Почему бы просто не прошить сразу нужную программу и всё?
TurnipBlue
10.08.2023 09:20Загрузчик это сдампленная, когда это было возможно, кем-то давно прошивка. Общественность не должна была заиметь это. Адекватного пути из-за коммерческой тайны не может быть по определению. Способ: загрузить старую прошивку -> обновиться до новой - самый удобный из имеющихся, если не единственный.
zurabob
10.08.2023 09:20+3Насколько помню, основная проблема это невозможность обновления более новыми версиями и поэтому отсутствие поддержки свежих процессоров. Я переделал себе один китайский свисток, но не смог им прошивать STM32G0(или править фьюзы?). Китайцы часто ставят уже 103CB и достаточно просто порезать дорожки и подпаять провода.
За 500+ рублей еще недавно на али можно было купить JLINK-OB в котором уже есть VCP и вывод SWO. Причем им можно отлаживать и прошивать почти любой мелкий ARM. Правда частота SWO всего 200кГц.
ИМХО основное преимущество этого варианта это разъем Type-C, если работаешь не с ноута и рядом не лежит хаб, то удлинитель не очень удобно и не всегда под рукой. Остальное очень натянуто, за годы я купил себе наверно с десяток китайских ST-LINK и ни разу не столкнулся ни с глюками, ни с неисправностью нового. Штуки три сжег, из нескольких выпаял процессор(оказалось дешевле нового), несколько раздал, остальные лежат в ящиках и постоянно теряются.)
Anzorik_228 Автор
10.08.2023 09:20Тут по-видимому дело случая, но китайские st-link мне порядком так поднадоели, я не говорил, что они глючные, нет, работают нормально, если рабочий пришёл. Много натыкался на неисправные уже по приходу, то не определялись, то приходила странная партия таких свистков, в которых забывали пару смд резисторов по d+ d- напаять, приходилось самому. В работе они совсем неудобные...
В общем целом им можно пользоваться, но мой опыт, основанный на статистическом методе, заставил меня уйти от этого вариата, вот уже больше года пользуюсь этим своим кастомным и не встречаю никаких проблем. Так что, смотрите сами, как вам удобнее, может мне стоило за 500 рублей, как вы говорите китайский J-Link себе купить, но пока всё хорошо
ancc
10.08.2023 09:20+1кстати V3 уже не работает с китайскими процессорами (например, Gigadevice). Кстати дома пользуюсь V2 программатором сделанным из обычной платы BluePill на stm32f103c8t6, там надо несколько элементов навесом всего.
HardWrMan
10.08.2023 09:20У меня есть китайские свистки. Однако я пользуюсь программатором от MikroE. Есть как проводной так и беспроводной.
Polarisru
10.08.2023 09:20Ну ок, не устраивает китайский программатор за 3 евро, но тратить свое время и куда больше ресурсов, чтобы повторить оригинальный программатор за 25 евро - это какой-то реально свой путь, бессмысленный и беспощадный. Я понимаю, если бы речь шла про J-Link, который стоит от 500 евро, но это уже апофеоз крохоборства.
Goron_Dekar
10.08.2023 09:20Ок, подскажи готовый неплохо защищённый программатор с поддержкой SWO и openocd не за 500$, богатей ты наш!
vau
10.08.2023 09:20+2Jetlink9 - весьма добротный клон за 67$. Пользуюсь ежедневно в работе и дома. Ни один пока не умер на моей памяти. Есть у них же еще более беспроблемный Jetlink Ultra V4, но ценник на 100$ побольше
beefdeadbeef
10.08.2023 09:20https://github.com/WeActStudio/WeActStudio.MiniDebugger
опционально зашить туда
https://github.com/blackmagic-debug/blackmagic
и можно забыть об openocd
Polarisru
10.08.2023 09:20-1Извините, но при чем тут openocd в отношении ST-Link? И да, вот вам готовый программатор с поддержкой SWO: оригинальный ST-Link v2:
Удивительно, да?
Anzorik_228 Автор
10.08.2023 09:20На каком пине висит swo? Можете на схеме показать? Я мог ошибиться
Жаль, что VCO нет, SWO приятное дополнение, но скорости не очень.
Anzorik_228 Автор
10.08.2023 09:20+1Эм... В общем целом на разработку иногда после работы вечером ушёл месяц, скинулся с другом на платы и компоненты, сделали себе хорошие программаторы и вышло ещё дешевле, чем описано стоимость в статье.
Вы чересчур предираетесь, какой программатор вы используете, тот самый J-Link может?
111djagernaut111
10.08.2023 09:20Есть ещё китайский wchlink mini. На нем swd и uart. Умеет шить stm32, risc v и, возможно, ещё какие-то arm'ы
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
Anzorik_228 Автор
10.08.2023 09:20Это не тот, который я показывал в статье, да VCP есть, но нет других возможностей, гляньте полноценный, не MINIE, там он шире описан. + В оффициальном магазине да, он столько стоит, но можно ли его купить россиянам и белорусам к примеру с учётом текущей ситуации в мире?
holomen
10.08.2023 09:20swo есть, type-c есть, защита usb от статики просматривается.
да, напрямую заказать тоже не получается, но в локальных магазинах около 1000грн (~$25)
ionicman
10.08.2023 09:20+1Я, если честно, не понял, зачем нужно SWO/VCP в программаторе?
Т.к. любая (ну или почти любая ) ножка процессора элементарно превращается в UART либо что-либо еще аппаратно, либо битбэнгом - и выводит или вводит все, что душе угодно.
Вирутальный COM? - да вообще без проблем - цепляешь UART к UART2USB с али за 1$ и все - можно отправлять/принимать что угодно, мало того, их можно присоеденить не один, а несколько к разным ножкам и гнать телеметрию по всем ним.
Причем тут программатор?
Ну или я не понимаю чего-то.
SuperTEHb
10.08.2023 09:20+1Можно. Можно ещё светодиодом сигнализировать какое-либо состояние и по мере отладки переносить зажигание светодиода в разное место программы.
Отладчик как раз и нужен чтобы всего этого НЕ делать. То есть никак не модифицируя программу можно чуть ли не в прямом эфире смотреть значения переменных. Точки останова, опять же. Да и сам отладочный интерфейс зачастую последовательный. То есть всё то же самое, только лучше и УЖЕ сделано производителем.
А последовательный порт? Просто удобно. Не нужно ещё одно устройство иметь и занимать ещё один порт.
То есть это всё не про что-то совершенно уникальное и абсолютно необходимое. Это просто ещё один способ немного облегчить себе жизнь.
Добавлено: И режим флешки туда же. На любом компьютере раздобыл файл прошивки, закинул его в микроконтроллер через CTRL+C, CTRL+V и готово. Не надо никаких утилит устанавливать, никаких программ, никаких сторонних средств и драйверов. Подключил, закинул, прошито!
Anzorik_228 Автор
10.08.2023 09:20Всё просто, зачем цеплять ещё некий сторонний китайский девайс, когда всё есть в одном устройсве, которое по цене за тот же 1$ дороже будет, чем китайский свисток + максимальная скорость передачи 2000000, не все уарт-усб чипы её тянут + доступен SWO. Используя SWO можете не запускать сторонний терминал, а выводить всё в строенный viewer вашего ПО для разработки и работать в одном окне условно.
В добавок, если имеете 3Д-принтер можно и корпус распечать себе, модель коротого чётко под такой программатор сделана, ну это так, вишенка на торте...
zurabob
10.08.2023 09:20SWO это еще один способ иногда выдать отладочную информацию не тормозя процессор. Можно записать до 8(16?) 32битных регистров ITM_STIMx и они будут последовательно выводится по SWO. Да, можно это же сделать с помощью UART и DMA, но это не всегда удобно и не всегда есть лишний UART.
Когда отлаживаешь что-то небольшое или носишь домой/обратно, то очень удобно когда к твоей плате подключен только маленький свисток.
Причем тут программатор?
Обычно писать "программатор и внутрисхемный отладчик для процессоров STM32" не очень удобно, поэтому пишут коротко "программатор".
randomsimplenumber
10.08.2023 09:20Ну или я не понимаю чего-то.
Я тоже ;)
Взял самый дешевый китайский свисток, поиграться в stm8. Подключается плоским шлейфом с 4 проводками прямо в плату без перекрещиваний. Пошаговая отладка в platformio через эти 4 провода работает. Программу в камень заливает. Что еще нужно от программатора?
randomsimplenumber
10.08.2023 09:20Ага, немного понял ;) stm8 и stm32 достаточно разные. Для stm8 свисток подходит идеально.
https://habr.com/ru/articles/402927/ - тут допиливали SWO с помощью 2 резисторов ;)
vanyas
10.08.2023 09:20-1Оригинальный ST-Link V3 стоит $35, это цена космос???
Собрать программатор из статьи, с заказом ПП выйдет не особо и дешевле
Anzorik_228 Автор
10.08.2023 09:20+1Всмысле? Я же показал сколько стоит такой программатор на AliExpress, смотрите скрины в статье и ссылки на другие магазины, не знаю где вы увидели 35$, может на оригинальном сайте, но если вы живёте в России или Беларуси, как я, то вряд ли у вас получится за такую цену купить. Да даже это дорого, вам в статье предалагается решение в 7 раз дешевле, а по факту ещё дешевле. Вот отрывок из статьи:
"Собрать программатор из статьи, с заказом ПП выйдет не особо и дешевле"
Ответ: Всмысле? Я же указал примерный ценник этого программатора, 4-5$ за плату, на доллар дороже чем китайский
spa5
10.08.2023 09:20+1Всегда радует, когда кто-то что-то делает сам. Автору +
Автор может записать видео обзор на этот программатор?Anzorik_228 Автор
10.08.2023 09:20Я попробую... В выходные может сделаю и дополню статью, размещу видео в конце статьи, следите за изменениями
NutsUnderline
10.08.2023 09:20в оригинальном STLink2 у меня моментально сломался разъем STM8 (белая пластмасса разъема)
Оригинальный STLink3 хорош (но не иделен) тем что умеет шить по CAN, I2c и всякому такому нестандартному что умет делать бутлоадер на новых STM32. Так что если клонировать еще то неплохо бы это железо сделать по уму а не как сделано - мелкой платой за большие деньги.
RogerRU
10.08.2023 09:20Я брал на Али ST-LINK v3 MINI за 1500 руб. в 02.2022, сейчас он стоит 2500 руб. в связи с курсом.
Работа автора хорошая, вопросов нет, но заказ только печатных плат для этого проекта +- в эти же 2500 и выйдет.Anzorik_228 Автор
10.08.2023 09:20Недавно заказывал иные платы, но тот же размер, общая сумма с PCB way вышла 8,66$, на русские это сейчас вроде 866 рублей. Компоненты чуть-чуть дороже. И в итоге вы получаете не одну платку, а несколько. + Лично я когда делал этот программатор скинулся с другом и вышло прямо говоря очень дёшего, ни про какие 2500 не идёт речь
RogerRU
10.08.2023 09:20Ни PCBWay, ни JLCPCB не сегодняшний момент в Россию не поставляют, только через посредников с некислой наценкой. Соответственно моя цена более чем реальна, я недавно заказал 5 плат через посредников, вышло где то 2100 за всё, но это было по курсу ~80, а сейчас он уже 97. Так что...
Anzorik_228 Автор
10.08.2023 09:20Понятно, я живу в Беларуси, поэтому такая разница, jlc тоже не работает, но pcbway доставляет. + Плат всё же 10 штук сразу приходит
NutsUnderline
10.08.2023 09:20+3Много странных разговоров о ценах но человек сам себе сделал приличный тролейбус и еще и катается на нем, в отличие от... с такого часто в минусы большие уходят ... так нет - уже считают плюс-минус доллар каждый
Sun-ami
Кроме оригинальных ST-Link V2 и дешевых китайских ST-Link V2 без поддержки SWO бывают ещё неоригинальные китайские ST-Link V2, которые внешне ничем не отличаются от оригинальных, и SWO поддерживают, но имеют намного более простую конструкцию без буферов и защит — голый микроконтроллер, и работают гораздо менее стабильно. Зато стоят лишь немного дороже цветных "USB-свистков".