DIY-программатор ST-Link V2.1
Привет, Хабр!
Зачастую среди большинства любителей и даже профиссионалов в сфере программирования микроконтроллеров 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
https://habr.com/ru/articles/442290/
https://habr.com/ru/articles/402927/
В связи с вышеизложенным было принято решение сделать себе полноценный, практичный и надёжный программатор 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
Рассматривать схему здесь может быть неудобно, все материалы есть на 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. Что-то было скопировано, что-то добавлено или модифицировано:
Самодельный ST-Link V2.1
Рассматривать схему здесь может быть неудобно, все материалы есть на 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Д принтере. Выглядит он так:
Существует более свежая версия данного программатора от того же автора, я лично ей не пользовался, она ничем не отличается от этой, краевым разъёмом. На мой взгляд описываемая версия будет удобнее своим краевым разъёмом. Вот ссылка для сравнения: https://github.com/GolinskiyKonstantin/ST-Link-V2–1/tree/6569656585df9b29ced242313036e0fa67f95222
Если вам чего-то не хватат в данной статье, пишите комментарии я дополню её дополнительными главами при необходимости.
P.S. Данная статья не вышла бы, если бы не просьба моих читателей. Спасибо за вашу активность!