Flash tool
The STM8-Discovery-Boards come with an integrated ST-Link-Interface, but for any other board you need a special flash tools in order to program the CPU. These litte devices look like a generic USB thumb drive and are sold for well under $3 on aliexpress, just search for st-link.
As far as I know there is no solution to use a regular Arduino board as a SWIM-capable flash programmer. The universal programmer uprog2 (website in german only) is based on an ATmega664 and it might be possible to use an Arduino Mega board with this software (untested).
esp-stlink is a ST-Link programmer based on the ESP8266. It allows programming an STM8 via a Wifi connection. The use of this programmer is supported by stm8flash now, but not yet integrated into the Arduino IDE. I didn’t test this yet.
Classic ST-Link V2 flash tools
There are two main versions of the ST-Link V2 compatible flash tool available: One in a USB-Drive-like metal housing (often pink or blue) and one made by Baite in a green plastic housing. Both work well, but they use a different pinout.

Both flash tools support the SWIM protocol for STM8 CPUs and the SWD protocol for the STM32 CPUs. The programmer from Baite additionally supports JTAG and is slightly superior to the more common one in the metal housing.
Pinout
Recently, very similar looking versions of the metal housing flash tool, but with different pinouts, have been seen. Make sure to check your specific tool before building cables! More information on the hardware and the pinouts
Pinout of Chinese ST-Link V2-clone made by Baite with green plasic housing (supports SWIM, SWD and JTAG):
Pinout of Chinese ST-Link V2-clone with metal housing (supports SWIM and SWD):
Installation for Linux
Save this as root in in /etc/udev/rules.d/99-stlink.rules :
Using the STM8S-Discovery board as a flash programmer is a special case and requires some additional blacklisting.
Installation for Windows
Download and install the ST-Link/v2 driver before you plug in the flash tool: STSW-LINK009 driver download (Registration required, but very easy)
I would love to include this driver with the Sduino install package, but I am not sure if this is covered by the ST licence terms for the driver.
Connection to the CPU board
The pinout of the SWIM connector P3 on my STM8S103 breakout board fits the pinout of the flash tool in the metal housing perfectly:
| Signal | SWIM connector P3 | Baite ST-Link | Metal ST-Link |
|---|---|---|---|
| 3V3 | 1 | 2 | 7 |
| SWIM | 2 | 5 | 5 |
| GND | 3 | 7 | 3 |
| NRST | 4 | 9 | 1 |
The Discovery boards made by ST all feature a ST-Link interface as well, but only the Discovery STM8S105 supports the SWIM protocol. The Discovery STM32F0308 implements SWD only and is not usable for the STM8.
Создаём ST-Link V2

Как-то так исторически сложилось, что, хоть и «подружился» с микроконтроллерами от ST Microelectronics я уже давненько, но полноценного отладчика до сих пор у меня не было. «Подсадил» на STM8 меня друг, подарив на день рождения платку STM8S-Discovery. Вдоволь наигравшись с целевым камушком, я отключил отладочную часть платки, а встроенный ST-Link стал «рабочей лошадкой» в моей лаборатории. Таковым и оставался бы до сих пор, и всё было хорошо, да вот где-то с полгода назад случилась ситуация, которая сподвигнула меня на изыскания по размножению отладчика: мне пришлось подключить обратно отладочную часть дискавери, так как проэкт, над которым предполагалось работать, использовал тот же проц, что и в дискавери, и обросла платка некислым таким «ежиком» из проводов и деталюшек, закипела работа… А тут заказчик звонит-мол, приедь ко мне да подправь, плиз, прошивочку в своём устройстве-да там фигня, задержку на секунду увеличить и всего-то делов… А «рабочая лошадь» чуть ли не намертво к рабочему столу привязана проводами да кабелюками, блин! Пришлось разбирать, конечно… Вернувшись от заказчика и грустно поглядев на то, что ещё утром было полем для бурной деятельности по проверке идей-полез искать вдохновения в гугле. Кому интересно, что из этого получилось-добро пожаловать под отрезь… 🙂
Вариант «пойти и купить», конечно же, рассматривался. Но, поскольку «неспортивно», был оставлен в качестве «плана Б». Очень быстро были найдены фотографии внутренностей полноценного ST-Link, его «слизанная» схема, и всё хорошо, да только прошивки для полного счастья не хватало. Но на третьей странице гугля была найдена ссылочка на наш же форум, где пользователь Chinook выложил «слизанную» им прошивку от ST-Link V2.
Само собой разумеется, вариант «сделать самому» тут же перевесил «план Б». Ну и кроме того, возможность добавить некоторый функционал, отсутствующий в фирменном St-Link, весьма таки грела душу.
Тут надо заметить, что чаще я делаю мелкие девайсики, которые дополняют или расширяют функционал родительских устройств. Счётчики там всякие, интерфейсные платки, индикаторы и прочая тому подобная мелочёвка. И большинство этих штучек получают свои миллиамперы питания от родительского устройства, вживляясь в его схему. Поэтому отсутствие в штатном St-Link возможности запитывать таргет непосредственно от отладчика, и как следствие-отсутствие возможности выбора питания-5 или 3.3 вольта-меня нисколько не радовало. Да, конечно же, существует лабораторный источник питания и всё такое… Собственно говоря, первое включение после сборки всегда через лабораторный БП-мало ли что, даже новые деталюшки и то не всегда бывают исправными, ну а если уж где-то «соплю» проглядеть-так и подавно проблемы будут. Но когда всё проверено-зачем лабораторный БП гонять, если можно запитаться прямо от компа?
Вот примерно с такими мыслями я и приступил к компиляции входных данных. Были изучены доступные схемы отладчиков-из мануалов по разным версиям Discovery и найденные в сети, внесены изменения и доработки, в результате получилась вот такая spaghetti diagram схема: 
Поскольку на момент составления схемы всё ещё были некоторые нестыковки, в частности-разночтения в подключении ножек идентификации, разводка JTAG в одной из схем отличалась, и, кроме того, окончательно было непонятно: заработает этот компот как надо или же нет-то часть ножек контроллера была выведена на контактные площадки для удобства перекоммутации. А если бы эта компиляция не заработала-то эти дополнительные контактные площадки позволят использовать плату как отладочную для какого-нибудь простенького USB устройства. Как раз с целью возможности использовать эту плату как отладочную я и развёл на ней JTAG-интерфейс, ибо JTAG J-Link у меня имеется в виде отдельного устройства. А для облегчения программирования платы теми, кто будет повторять эту конструкцию, на отдельный разъём были выведены все контакты, необходимые при программировании микроконтроллера с использованием его собственного загрузчика. Забегая вперёд, замечу, что ошибки в выбранной мной для работы версии схемы всё же сделали своё чёрное дело, и готовую плату пришлось-таки немного почикать скальпелем и засопливить перемычками. В статью пошла уже исправленная версия схемы и разводки, ну а фотки-уж как есть…
Разводка разъёма SWIM выполнена в соответствии с распиновкой оригинального ST-Link’а, поскольку у меня есть уже очень много устройств, кабеля программирования которых используют именно эту распиновку. А вот распиновка SWD/JTAG разъёма моя собственная. Во-первых, применённый в оригинальном ST-Link разъём не вписывался в выбранный мной корпус, во-вторых, для штыревых разъёмов типа PLS-PLD я, по возможности, предпочитаю делать «диагональные» или «симметричные» разводки разъёмов, как минимум в той части, в которой разведена сила. При этом, если вдруг разъём случайно будет перевёрнут на 180 градусов, земля и питание всё равно попадут на свои места-меньше риска испустить magic smoke. Просто устройство не будет работать. Естественно, если в разъёме присутствуют сигналы выборки или включения, неплохо бы позаботиться, чтобы при перевороте разъёма они попали на пины, которые обеспечат этим сигналам неактивные уровни. Такая себе защита от дурака, хотя и давно известно, что хуже дурака-только инициативный дурак…
Плата разводилась с использованием компонентов типоразмера 0603 под корпус 20-13 фирмы Sanhe. Можно было, конечно, использовать и 0805-места на плате более чем достаточно. Но я уже давненько перешёл на 0603, и не стал изменять своим привычкам. Размещение компонентов выбрано таким, чтобы плату можно было как монтировать в корпус (при этом кварцевый резонатор и разъёмы отладчика запаиваются на обратной стороне платы и используются выводные светодиоды), так и без корпуса, при этом разъёмы и кварц запаиваются сверху, и используется двухцветный светодиод FYLS-1210. Поскольку мне до сих пор не понятно, как и для чего ST-Link использует контроль напряжения целевого устройства, предусмотрена возможность коммутации измерительного входа микроконтроллера с постоянно присутствующего напряжения питания на напряжение питания целевой платы. Для контроля напряжения питания целевой платы необходимо запаять резистор R14, для отключения возможности контроля должен быть запаян резистор R16, причём должен быть запаян либо один, либо второй, но никак не оба вместе. В моей плате запаян R14, всё отлично работает.

Печатная плата устройства во всех отношениях экспериментальная. Экспериментальное устройство, первая проба металлизации отверстий в домашних условиях, первый тентинг с использованием фоторезиста Riston, первая попытка вытравить зазоры 0.2мм на гальванически нарощенной и из-за этого толстой фольге, первое использование сухой плёночной маски… Что-то из всего этого получилось идеально, что-то не очень, но это уже тема для отдельной статьи.
После запаивания компонентов и пробной установки разъёмов плата приобретает следующий вид:

Делаем пробное подключение к лабораторному блоку питания, убеждаемся в отсутствии дыма и нагрева деталей, убеждаемся, что стабилизатор выдаёт свои 3.3 вольта. Потом подключаем платку к компьютеру, который должен бодро отрапортовать о неопознанном устройстве USB. Раз так-значит пока всё в порядке.
Идём на сайт ST Microelectronics и скачиваем оттуда Flash Loader Demostrator. «Повбывав би гадiв», которые ST сайт делали. Найти там что-либо… Впрочем, извините, отвлёкся. Скачиваем, распаковываем, устанавливаем. Прямо на разъём загрузчика одеваем перемычку, которая соединит вывод BOOT0 микроконтроллера с плюсом питания и введёт контроллер в режим загрузчика, туда же подключаем разъём от USB-RS232 преобразователя:

Подключаем это всё в USB следующем порядке: cначала подключаем USB-RS232, затем подключаем ST-Link, отключать потом будем в обратном порядке. Запускаем Flash Loader Demonstrator, и, если мы не поджарили микроконтроллер во время впаивания, не убили его статикой и не перепутали RX/TX при подключении интерфейса, то софтинка должна бодро отрапортовать, что Target is readable. А значит, ещё один шаг к созданию собственного отладчика пройден.
Из прикреплённого к статье архива извлекаем файлик STLinkV2.J16.S4.bin, натравливаем на него Flash Loader, ждём пару секунд. Готово! Отключаем сначала ST-link, затем интерфейс. Я не рассматриваю вариант прошивки через JTAG-у кого он есть, те и сами знают, как это сделать; у новичков же адаптер JTAG вряд ли будет. Собственно, его-то мы как раз и делаем… Итак, отключаем интерфейс программирования, снимаем перемычку, и торжественно подключаем наш свежеиспечённый ST-Link к компьютеру. Который должен найти новое устройство и запросить на него дровишки, которые мы уже успели заблаговременно скачать с сайта производителя. Торжественно подключаем целевое устройство, запускаем IAR (ну или кто там в чём программирует), нажимаем «записать» и… Нифига не работает! Can not communicate with tool. Вот же ж блин! Столько труда и всё впустую. Последующие три дня проходят в попытках понять что же не так. Попытки замыкания ножек идентификации на землю и на питание в разных комбинациях, изучение осциллограмм, курение логов USBLyzer’а… Пока в один вечер, а если точнее-уже давным-давно ночер, не промахнулся по менюшке и вместо STVP не запустил St-Link Upgrade Utility. Хотя и обновлять на ту же самую версию-нонсенс, палец автоматом кликнул «Upgrade». Апгрейд прошёл штатно, но что самое главное-девайс перестал отваливаться и наконец-то заработал! Когда радости немного поулеглись (я аж проснулся), вернул схему к первоначальному виду и повторил эксперимент. И таки да, дело не в перемычках, а в прошивке. Судя по всему, что поскольку Chinook скомпоновал прошивку из двух разных версий, что-то в ней не совсем срослось. И хотя устройство и определяется как полноценный дискавери, работать оно не может. Корректное обновление записывает полноценную прошивку и решает проблему.
Теперь, когда железяка работает, пора подумать и о корпусе. Не, я, конечно, понимаю, что «труЪ киберпанк» и всякое такое… Но пару выездов для работы на территорию заказчиков, когда приходилось располагаться с ноутбуком посреди торчащих прутьев арматуры, а провода и платы размещать между кучками стальной стружки, при этом бояться пошевелиться, чтобы случайно что-нибудь ни на таргет, ни на отладчик не уронить, и самому при этом с насеста не сверзиться-навели на стойкую уверенность, что корпус таки быть должен. Как минимум, одной зоной внимания меньше… Берём наш свежеприобретённый корпус, берём боевой «Дремель» и зубопротезный бор, и через пяток минут жужжания бормашинкой и ещё пяток-шуршания надфилем получаем вот такую красоту: 
Ну что ж, теперь можно и разъёмы на их постоянное место впаять, и корпус закрыть. Всё получилось, железяка работает. Но… У нас получилась унылая белая (серая, чёрная-кому там какая попадётся) коробка с двумя разъёмами и перемычкой. Уберём её в ящик стола на месяц-другой, потом решим поШкодить, достанем-и будем долго вспоминать, какой контакт разъёма куда надо подключать, и в какое положение перемычку ставить. Что-то вспомнится, что-то нет, прийдётся доставать из архива проэкт, открывать его и смотреть, что там куда подключено. Непорядок, одним словом. А раз так-надо этот непорядок исправить, желательно, одновременно скрасив унылость монотонной коробки. Сходим на сайт ST, нагло утырим у них их логотип, засунем его в Photoshop (или любимый опенсорсный графический редактор-на выбор по вкусу), немножко там над ним поколдуем… Посолим, поперчим, испечём до готовности:
Полученную бумажку можно вырезать и приклеить на тонкий двухсторонний скотч, но-«нормальные герои всегда идут в обход». Выпросил я как-то на одной из обслуживаемых мной фирм жидкость чудную, заморскую, «жидкий скотч» называемую. Остатки, на попробовать, а вдруг пригодится. Как оказалось впоследствии-очень полезная в мастерской штука. Выкройку на заготовку приклеить перед вырезанием, наклейки всякие сделать, шильдики… Жена с дочкой для рукоделия ихнего таскают периодически, но чего они там с ним делают-не знаю. В общем, у кого ещё этой штуки в арсенале нету-рекомендую обзавестись. А у кого есть-берём баллон и брызгаем на обратную сторону бумажки. Тут должен сделать два замечания. Во-первых, брызгать надо ещё не вырезанный шильдик: так покрытие будет равномерным, и весь стол потом не будет из себя представлять липучку для мух. Хотя брызгать в любом случае лучше на балконе или в подъезде, ибо разлетается неимоверно. Если раз-два, да ещё газетку на стол постелить, то вроде как и ничего. А вот если пользоваться постоянно-комки липкой пыли потом будут обнаруживаться «в самых неожиданных местах»(С). О том, что дышать распылом крайне не рекомендуется, я даже не упоминаю. И во-вторых, не следует пытаться за один раз нанести всю толщину покрытия, особенно на бумаге. Вот как раз о неприятном свойстве бумаги всё впитывать я после продолжительной работы с плёночными шильдиками как-то забыл, ну и дунул, что называется, «от души». Налитая лужица тут же бодро впиталась в бумагу, и теперь у меня наклейка не беленькая, а как будто масляными пальцами залапанная местами. Переделывать я уже не стал, ну а вы постарайтесь не повторять моих ошибок. Наносите клеевой состав тонкими слоями, и каждый раз дожидайтесь высыхания предыдущего слоя (2-3 минуты при комнатной температуре). При этом первые два слоя «запечатают» поры в бумаге, а последующие два-три создадут необходимую для хорошей адгезии толщину слоя. Вот теперь, после окончательной сушки, можно вырезать готовый шильдик и клеить его на наш корпус. Выглядеть это будет так: 
Ну вот, а теперь можно и попрограммировать. Равно как и попрошивать, поотлаживать… 
Пару слов напоследок. Поскольку это моя первая статья в сообществе, просьба ногами не бить и гнилыми помидорами/тухлыми яйцами не кидать. Объективная критика, наоборот, очень даже приветствуется. Статью размещаю в личном блоге, можно ли/нужно ли её скопировать куда-то в профильный раздел-пусть решают общественность и Ди Хальт. Отладчик был сделан в январе 2013, и 95% этой статьи было написано тогда же, но дописал оставшиеся 5% и публикую я всё это только сейчас, потому что до сего момента не было случая проверить работу отладчика по SWD и JTAG. Собственно, до этого времени работал преимущественно с STM8. Сейчас появилась девборда с STM32, работоспособность SWD/JTAG проверил, даже прошивку в клоне уже успел обновить на крайнюю, всё в порядке. Так что публикую со спокойной душой. 🙂
UPD:Перезалил ST-Link V2 PCB.zip, так как в него по недосмотру попала старая версия разводки, та самая, которую пришлось скальпелем чикать. Файл CAMTASTIC-LUT.pdf был старый! С фоторезистным вариантом-CAMTASTIC.pdf всё было и есть в порядке. Если Вы будете пробовать изготавливать плату по ЛУТ-технологии-перекачайте, пожалуйста, архив снова. Извините, недосмотрел, сам я уже давно от ЛУТ ушёл…
UPD2:Коллективный разум в комментариях выявил недостаток этой версии отладчика-отсутствие преобразователя уровней. Собственно говоря, во время проэктирования этой платы я даже и не знал, что в оригинале этот самый преобразователь есть. Соответственно, его отсутствие не позволит работать с целевыми платами, МК в которых запитаны от напряжения существенно ниже 3.3в. С этим отладчиком работа с такими платами будет возможна только в случае временного повышения напряжения питания до 3.3в (если это не приведёт к повреждению каких-либо других компонентов платы, естественно). Ну что ж, появится свободное время-буду думать о второй версии этой платы, уже с преобразователем уровней, и, возможно, гальванической развязкой. А пока хочу отдельно и особо поблагодарить коллег dosikus , GYUR22 ,Katz и Vga за конструктивную критику и ценные комментарии…
ST-Link V2 в маленьком корпусе
Самый недорогой программатор/отладчик ST-Link V2 на примере STM32F103CBT6.

Обязательно меняем провода на короткие
Итак первым делом меняем провода для соединения ST-LINK V2 с STM32F103C8T6 на короткие 10см.
Используем для соединения с STM32F103C8T6 только 4 провода (SWD интерфейс):
3.3V — 3.3V
GRD — GRD
SWDIO- DIO
SWCLK- CLK
Нет SWO трассировки
То есть не выведен отдельный провод PB3 SWO из программатора наружу.
Но в принципе программно SWO реализован внутри программатора. Только воспользоваться им нельзя. Белый провод это он и есть, а как подпаятся к ножке микросхемы программатора вопрос .

Как обновить внутреннее ПО
через программу ST-LINK Utility
Проверяем сначала связь с контроллером программой ST-LINK Utility:
Обе перемычки на STM32F103C8T6 в положении 0
запускаем, жмем Connect и все определяется ОК
щелкаем Settings и видим, что устройство определяется автоматически корректно (см.скриншот) , port = SWD, target Voltage=3.2V и т.д.
Обновление внутреннего ПО
Чтобы сделать Firmware Update в программе ST-LINK Utility надо установить перемычку в положение 1 (режим DFU). В результате должно получится примерно так, кнопка Yes активна:

Иногда , почему-то не удается сделать Firmware Update. Но помогает — закрытие всех программ, перезагрузка ПК (танцы с бубном).
По-видимому надо разобраться что устанавливать? — Hardware Reset (при SoftWare Reset у меня не срабатывает).

Важно! — в ST-Link V2 после прошивки (через Stm32-Link Utility) сохраняются старые настройки Mode (Normal|Hot Plug|Connect Undr Reset) и Reset Mode (Software System Reset|Core Reset|Hardware Reset).
Если не работает ничего — пытаемся разобраться с дополнительными настройками
Mode : Connect Under Reset можно выставить только с Reset Mode : Hardware Reset (Похоже по смыслу , что это тот самый режим когда надо ручками кнопку Reset нажимать и перемычка в 1 д/б).
The “Connect Under Reset” option allows to connect to the target using a reset vector catch before executing any instruction. This is useful in many cases like when the target contains a code that disables the JTAG/SWD pins.
Т.е. это похоже когда программа в начале своего исполнения отключает SWD возможности. Понятно отладка тут не будет возможна.
Mode : Normal возможен с Reset Mode : (Software System Reset|Core Reset|Hardware Reset) .
With “Normal” connection mode, the target is rest then halted. The type of reset is selected using the “reset Mode” option.
Mode : Hot Plug возможен с Reset Mode : (Software System Reset|Core Reset|Hardware Reset)
The “Hot Plug” option allows to connect to the target without halt or reset. This is useful to update the RAM addresses or the IP registers while the application is running.
И мы понимаем, что Hot Plug — пока этот режим нам не нужен никак.
Итак режим (Mode) и Reset Mode настраивается именно в ST-Link V2 через Stm32-Link Utility.
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 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;
Высокая цена (от 50$);
Нет поддержки SWO;
Разъём подключения micro-USB Type B без защиты от статического напряжения.

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


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

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