Как подключить st link v2 к stm32
ST-LINK/V2 это внутрисхемный отладчик и программатор для микроконтроллеров STM8 и STM32. Однопроводный интерфейс (single wire interface module, SWIM) и JTAG/SWD (SWD это сокращение от serial wire debugging) реализуют коммуникацию с любым микроконтроллером STM8 или STM32, работающим на плате конечной системы.
В дополнение к функционалу ST-LINK/V2, новая версия ST-LINK/V2-ISOL реализует изоляцию цифрового интерфейса между PC и целевой программируемой платой. Изоляция выдерживает напряжения до 1000 VRMS.
Интерфейс USB full-speed осуществляет обмен между компьютером PC разработчика и:
• Устройствами STM8 через ПО ST Visual Develop (STVD) или ST Visual Program (STVP). Это ПО поставляется компанией STMicroelectronics (ST).
• Устройствами STM32 в средах разработки Atollic®, IAR™, Keil® и TASKING®.
![]() |
![]() |
| ST-LINK/V2 | ST-LINK/V2-ISOL |
Рис. 1. Отладчики ST-LINK/V2 и ST-LINK/V2-ISOL.
Отладчик ST-LINK также встроен в оценочные платы разработчика STM32Fxxx Discovery [2]. Вот так выглядит отладчик ST-LINK/V2-B на плате STM32F429 Discovery (компоненты отладчика выделены желным прямоугольником):
Функциональные возможности ST-LINK:
• Питание 5V подается от хоста PC через коннектор USB.
• Подключение USB 2.0 full speed через кабель USB standard A — Mini-B.
• Функции интерфейса отладки SWIM:
– поддерживаются уровни от 1.65V до 5.5V;
– поддерживаются режимы скорости SWIM low-speed и high-speed;
– скорость программирования: 9.7 килобайт/сек на low speed и 12.8 килобайт/сек на high speed;
– подключение к отлаживаемой плате осуществляется через кабель стандартный вертикальный ERNI (ref: 284697 или 214017) или горизонтальный (ref: 214012), либо через коннектор со стандартным шагом выводов 2.54 мм.
• Функции интерфейса отладки JTAG/SWD:
– поддерживаются уровни 1.65V .. 3.6V на выходах, и входы допускают напряжения до 5V (5V tolerant inputs);
– 20-выводный JTAG кабель с шагом выводов 2.54 мм;
– поддерживаются коммуникации JTAG, SWD и SWV.
• Поддерживается непосредственное обновление прошивки (Direct Firmware Update, DFU).
• Светодиоды состояния (Status LED), которые мигают во время обмена с PC.
• Рабочий диапазон температур 0 .. 50°C.
Таблица 1. Информация для закупки.
Order code Описание варианта ST-LINK
ST-LINK/V2 Внутрисхемный отладчик/программатор.
ST-LINK/V2-ISOL Внутрисхемный отладчик/программатор с гальванической развязкой.
[Что входит в комплект отладчика]
Поставляемые компоненты показаны на рис. 2 и рис. 3. Это следующие элементы (перечислены слева направо):
• Стандартный кабель USB A — USB Mini-B (A).
• Отладчик ST-LINK/V2 (B).
• Коннектор SWIM (C).
• Плоский кабель SWIM со стандартным коннектором ERNI (D).
• Плоский кабель JTAG или SWD и SWV flat ribbon with a 20-pin connector (E).

Рис. 2. Комплект ST-LINK/V2.

Рис. 3. Комплект ST-LINK/V2-ISOL.
[Конфигурирование]
ST-LINK/V2 разработан на микроконтроллере STM32F103C8 (высокопроизводительное ядро Arm®(a) Cortex®-M3). Он доступен в корпусе TQFP48. Как показано на рис. 4, у ST-LINK/V2 есть два коннектора:
• Коннектор STM32 для интерфейса JTAG/SWD и SWV.
• Коннектор STM8 для интерфейса SWIM.
У ST-LINK/V2-ISOL один коннектор для интерфейсов STM8 SWIM, STM32 JTAG/SWD и SWV.

Рис. 4. Коннекторы ST-LINK/V2 (слева) и ST-LINK/V2-ISOL (справа).
A: Коннектор STM32 JTAG и SWD для подключения к целевой плате.
B: Коннектор STM8 SWIM для подключения к целевой плате.
C: Коннектор STM8 SWIM, STM32 JTAG и SWD для подключения к целевой плате.
D: светодиод, показывающий активный обмен.
Для разработки приложений на микроконтроллерах STM8 отладчик ST-LINK/V2 можно подключить к целевой плате двумя разными кабелями, в зависимости от того, какой коннектор установлен на плате устройства. Это следующие кабели:
• Плоский кабель SWIM, на одном из концов которого стоит стандартный коннектор ERNI.
• 4-контактный кабель SWIM с шагом 2.54 мм или кабель SWIM с отдельными проводами.
На рис. 5 показано, как подключить ST-LINK/V2, если на целевой плате находится стандартный коннектор ERNI 4-pin SWIM.

Рис. 5. Соединение ERNI.
A: целевая плата системы с коннектором ERNI.
B: кабель с коннектором ERNI.
C: целевой коннектор STM8 SWIM.
Также см. рис. 11 во врезке «Дополнительная техническая информация».
Рис. 6 показывает, что на целевом коннекторе ST-LINK/V2-ISOL вывод 16 отсутствует. Этот отсутствующий вывод используется как ключ безопасности коннектора, гарантирующий правильную ориентацию коннектора SWIM при подключении. Этот ключ безопасности используется на кабелях SWIM и JTAG.
![]() |
![]() |
![]() |
Рис. 6. Ключ безопасности на коннекторах.
Дешевый вариант SWIM-подключения. Рис. 7 показывает, как подключить ST-LINK/V2, если на плате стоит 4-выводный коннектор с шагом выводов 2.54 мм.

Рис. 7. Недорогое SWIM-подключение.
A: целевая плата системы, на которой установлен коннектор с шагом выводов 2.54 мм.
B: 4-проводный кабель, или подключение отдельными проводами.
C: целевой коннектор STM8 SWIM.
Также см. рис. 12 во врезке «Дополнительная техническая информация».
Сигналы и соединения SWIM. Таблица 2 дает общее описание SWIM: имена сигналов, функции и сигналы целевой платы при использовании 4-проводного кабеля и 4-выводного коннектора.
Таблица 2. SWIM-соединение с ST-LINK/V2.
| Pin | Имя сигнала | Функция | Соединение с целевой платой |
| 1 | VDD | VCC целевой платы (1) | VCC микроконтроллера |
| 2 | DATA | SWIM | Вывод SWIM микроконтроллера |
| 3 | GND | Земля | GND |
| 4 | RESET | Сброс | Вывод RESET микроконтроллера |
Примечание (1): источник питания целевой платы подключен к плате отладчика ST-LINK/V2 для гарантии совместимости уровней между платой и отладчиком.

Рис. 8. Целевой коннектор SWIM.
Таблица 3 показывает имена сигналов, функции и соединения сигналов с целевой платой при использовании кабеля с отдельными проводами. Поскольку у кабеля SWIM с отдельными проводами есть независимые коннекторы для каждого сигнала, то можно подключить ST-LINK/V2-ISOL к целевой плате, на которой нет стандартного SWIM-коннектора. На таком плоском кабеле все сигналы имеют разные цвета и отдельную метку, что упрощает подключение к целевой системе.
Таблица 3. Соединения ST-LINK/V2-ISOL недорогим кабелем SWIM.
| Цвет | Имя сигнала кабеля | Функция | Соединение с целевой платой |
| Красный | TVCC | VCC целевой платы (1) | VCC микроконтроллера |
| Зеленый | UART-RX | Не используется | Зарезервировано (2) (не подключается к целевой плате) |
| Синий | UART-TX | ||
| Желтый | BOOT0 | ||
| Оранжевый | SWIM | SWIM | Вывод SWIM микроконтроллера |
| Черный | GND | Земля | GND |
| Белый | SWIM-RST | RESET | Вывод RESET микроконтроллера |
(1) Источник питания целевой платы подключен к плате отладчика ST-LINK/V2 для гарантии совместимости уровней между платой и отладчиком.
(2) BOOT0, UART-TX и UART-RX зарезервированы для использования в будущих разработках.
TVCC, SWIM, GND и SWIM-RST могут быть подключены дешевым коннектором с шагом 2.54 мм, установленным на целевой плате.
Для разработки программ на основе микроконтроллеров STM32 отладчик ST-LINK/V2 должен быть подключен к целевой системе стандартным 20-выводным плоским кабелем JTAG.
Таблица 4 показывает имена сигналов, функции и соединения сигналов с целевой платой при использовании стандартного 20-выводного кабеля JTAG.
Таблица 4. Соединения кабелем JTAG/SWD.
| Pin | Коннектор ST-LINK/V2 (CN3) | Функция ST-LINK/V2 | Соединение с целевой платой JTAG | Соединение с целевой платой SWD |
| 1 | VAPP | VCC целевой платы | VDD микроконтроллера (1) | VDD микроконтроллера (1) |
| 2 | ||||
| 3 | TRST | TRST JTAG | JNTRST | GND (2) |
| 4 | GND (3) | GND (3) | GND (3)(4) | GND (3)(4) |
| 5 | TDI | JTAG TDO | JTDI | GND (2) |
| 6 | GND (3) | GND (3) | GND (3)(4) | GND (3)(4) |
| 7 | TMS_SWDIO | JTAG TMS, SWDIO | JTMS | SWDIO |
| 8 | GND (3) | GND (3) | GND (3)(4) | GND (3)(4) |
| 9 | TCK_SWCLK | JTAG TCK, SWCLK | JTCK | SWCLK |
| 10 | GND (5) | GND (5) | GND (4)(5) | GND (4)(5) |
| 11 | Не подключено | |||
| 12 | GND | GND | GND (4) | GND (4) |
| 13 | TDO_SWO | JTAG TDI, SWO | JTDO | TRACESWO (6) |
| 14 | GND (5) | GND (5) | GND (4)(5) | GND (4)(5) |
| 15 | NRST | NRST | NRST | NRST |
| 16 | GND (3) | GND (3) | GND (3)(4) | GND (3)(4) |
| 17 | Не подключено | |||
| 18 | GND | GND | GND (4) | GND (4) |
| 19 | VDD (3) | VDD (3.3 V) (3) | Не подключено | |
| 20 | GND | GND | GND (4) | GND (4) |
(1) источник питания целевой платы подключен к плате отладчика ST-LINK/V2 для гарантии совместимости уровней между платой и отладчиком.
(2) Подключается к GND для снижения шума в кабеле.
(3) Доступно только на ST-LINK/V2, не подключено на ST-LINK/V2-ISOL.
(4) Для правильной работы как минимум один вывод должен быть подключен к земле (рекомендуется подключить все).
(5) GND ST-LINK/V2, используемый SWIM на ST-LINK/V2-ISOL (см. таблицу 3).
(6) Опционально: для трассировки Serial Wire Viewer (SWV).
Рис. 9 показывает, как соединить ST-LINK/V2 с целевой системой кабелем JTAG.

Рис. 9. Соединение JTAG и SWD.
A: целевая отлаживаемая плата с коннектором JTAG.
B: плоский 20-выводный кабель JTAG/SWD.
C: целевой коннектор STM32 JTAG и SWD.

Рис. 10. Нумерация выводов коннектора JTAG (вид на контакты коннектора с верхней стороны платы).
Для некоторых систем стандартный 20-выводный коннектор с шагом выводов 2.54 мм слишком велик, и разработчики часто предпочитают коннектор с уменьшенным количеством выводов (например 10 контактов вместо 20). Для отладчиков ST-LINK/V2 или ST-LINK/V2-ISOL есть адаптер Tag-Connect и кабель, упрощающие подключение отладчика к целевой плате без необходимости установки на плату большого разъема.
Для дополнительной информации об этом решении и цоколевке посетите сайт www.tag-connect.com. Компоненты, совместимые с интерфейсами JTAG и SWD:
a) Адаптер TC2050-ARM2010 (переходник 20 в 10 выводов).
b) TC2050-IDC или TC2050-IDC-NL (No Legs, без ножек), 10-выводный кабель.
c) TC2050-CLIP с клипсой для использования с TC2050-IDC-NL (опционально).
Индикационный светодиод ST-LINK/V2. Светодиод, помеченный «COM» на верхней стороне ST-LINK/V2, показывает его состояние (независимо от типа соединения):
• Светодиод мигает красным: происходит энумерация USB на хосте PC.
• Светодиод красный: установлено соединение между PC и ST-LINK/V2 (энумерация закончилась).
• Светодиод мигает зеленым/красным: идет обмен между целевой платой и PC.
• Светодиод зеленый: последнее соединение прошло успешно.
• Светодиод оранжевый: обмен ST-LINK/V2 с целевой платой был неудачным.
[Обновление прошивки]
В ST-LINK/V2 встроен механизм обновления прошивки отладчика (firmware) через порт USB. Поскольку firmware во время жизни продукта ST-LINK/V2 может развиваться (новый функционал, исправление ошибок, добавление поддержки новых семейств микроконтроллеров, . ), то рекомендуется периодически посещать специальные странички www.st.com, чтобы следить за появлением свежей версии firmware.
[Средства разработки]
Для STM8. См. ST toolset Pack24 с патчем 1 или более свежий, который включает в себя ST Visual Develop (STVD) и ST Visual Programmer (STVP).
Для STM32 и программирования Flash. Инструментарий сторонних производителей: Atollic® TrueSTUDIO®, IAR™ EWARM, Keil® MDK-ARM™ и TASKING® VX-toolset поддерживают ST-LINK/V2 в соответствии с версиями, как это показано в таблице 5.
Таблица 5. Поддержка сторонними разработчиками ST-LINK/V2.
| Разработчик | Тулчейн/IDE | Версия |
| Atollic ® | TrueSTUDIO ® | 2.1 |
| IAR™ | EWARM | 6.20 |
| Keil ® | MDK-ARM™ | 4.20 |
| TASKING ® | VX-toolset for Arm ® Cortex ® -M | 4.0.1 |
Отладчик ST-LINK/V2 требует для себя специального драйвера USB. Если установленный инструментарий также устанавливает этот драйвер автоматически, то он записывает файл stlink_winusb.inf в каталог inf папки Windows.
Если инсталлятор не устанавливает драйвер, то драйвер можно найти на сайте www.st.com:
1. Откройте в браузере страничку www.st.com.
2. На закладке «Поиск» (search), в поле part number найдите ST-LINK/V2.
3. Кликните на ссылку в столбце Generic Part Number для ST-LINK/V2.
4. На закладке «Design support», в секции «SW drivers» кликните на иконку загрузки, чтобы загрузить архив с драйвером (файл с именем наподобие en.stsw-link009.zip).
5. Распакуйте и запустите инсталлятор dpinst_x86.exe или dpinst_amd64.exe в зависимости от 32-битной или 64-битной версии операционной системы Windows.

Рис. 11. Стандартный кабель SWIM ST-LINK/V2 с коннектором ERNI.

Рис. 12. Дешевый кабель SWIM ST-LINK/V2.
VDD: сигнал для определения напряжения питания целевой платы.
DATA: сигнал данных SWIM DATA для обмена между целевой платой и отладчиком.
GND: напряжение земли.
RESET: сигнал сброса целевой платы.
Создаём 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 за конструктивную критику и ценные комментарии…
Русские Блоги
[Перепечатано] Подготовка к работе с STM32 [Настройка Keil, создание шаблона Keil, загрузка конфигурации ST-Link V2]
Подготовка к STM32 [Конфигурация Keil, создание шаблона Keil, загрузка конфигурации ST-Link V2]
2017/03/02 10:26:23o0 галогеноводород 0oКоличество чтений: 12011
Уведомление об авторских правах: https://blog.csdn.net/zeroice7/article/details/59483155
0. Подготовка к программированию STM32
Название: подключение ST-Link V2, настройка Keil, создание шаблона файла;
Среда программирования: Win10 64-bit, Keil 5.11, версия периферийной библиотеки ST: 3.5.0;
[В первый раз, когда пишу блог и просто связываюсь с STM32, что-то не так, я надеюсь, вы можете указать на это. 】
После загрузки и установки драйвера ST-Link V2 (если у вас его нет, вы можете найти его прямо в магазине Baodian);
1. Подключите ST-Link V2 и STM32
Прежде всего, если ваш загрузчик выглядит так:
Затем вы можете установить соответствующий интерфейс в соответствии со следующим:


Соответствующий контакт подключения, как показано на рисунке (подключите любой контакт с тем же именем):
ST-Link V2
STM32
2. ARM.CMSIS. И Keil.STM32F1xx_DFP требуются для подготовки
Эти два файла используются для разработки STM32 в Keil 5, CMSIS является стандартом интерфейса (он должен быть установлен) Keil.STM32F1xx_DFP — пакет библиотеки прошивки keil5, используемый для файлов разработки STM32.
(Каждый пытается найти файл самостоятельно, опасаясь, что он будет гармонизирован.)
3. Создайте шаблон файла проекта (демонстрационный файл)
Позже создайте шаблон файла проекта и непосредственно скопируйте демонстрационный файл, и отредактируйте проект на шаблоне без повторной настройки.
Сначала создайте новую папку и назовите ее «Demo».
Вам необходимо скачать файл "STM32F10x_StdPeriph_Lib" на официальном сайте ST:
1: Как показано в [Продукты] -> [Микроконтроллер] -> [Инструмент и ПО] ->
【STM32Стандартные периферийные библиотеки】 -> Выберите подходящую загрузку Вот серия STM32F10X




После распаковки загруженного «STM32F10x_StdPeriph_Lib_V3.5.0», мы помещаем“Libraries”Копировать в“Demo”Папка. Опять же в“Demo”Создайте четыре пустые папки в используемой папке, названной следующим образом:

Просто распакует папку“STM32F10x_StdPeriph_Lib”В [Project] -> [Template], Main.c, stm32f10x_it.c, stm32f10x_cong.h, stm32f10x_it.c, stm32f10xit.h пять файлов копируются в папку «Пользователь».

“User”Папки используются для хранения пользовательских подпрограмм;
“Project”Папка используется для хранения соответствующих файлов при сборке проекта;
“Obj”Файл используется для хранения объектного файла, сгенерированного во время компиляции;
“List”Используется для хранения файлов списков и карт, созданных во время компиляции;
“Libraries”Это файл функции библиотеки.
4. Строительный проект
1: создать новый проект
Откройте Keil 5, выберите [Проект] -> [Новый проект µVision]

Создайте проект, сохраните его в разделе [Project] в файле [Demo], а затем выберите модель процессора. Основной UP — F103RC.

На вопрос, нужно ли автоматически копировать код запуска, который поставляется с MDK, выберите Нет.
2: установить параметры
Вызовите [ManageProject Items],

Откроется окно [ManageProject Items] для его редактирования.

Измените «ProjectTagets» на «STM32F103RCT6 Flash» и добавьте четыре группы, а именноUser、Lib、CMSIS、Startup,Как показано ниже:
3: Добавить соответствующий файл пользователя в «Пользователь»
Выберите «Пользователь» в «Группе» и добавьте несколько пользовательских файлов в «Пользователь».
В автономном разделе «Файлы» «Добавить файлы» выберите путь для поиска «Пользователь» в папке «Демо»,

Добавьте «main.c» и «stm32f10x.c», как показано ниже.

4: Добавить библиотечные файлы в "Lib"
Выберите «Lib», чтобы добавить библиотечные файлы, найдите путь к файлу: [Demo] -> [Libraries] -> [STM32F10x_StdPeriph_Driver] -> [src] Добавьте необходимые библиотеки библиотек вызова по очереди, если новичок не знаком с тем, какие файлы библиотеки могут все Добавить в.

5: Добавить связанные с ядром файлы STM32F в CMSIS
Выберите «CMSIS», чтобы добавить файлы, связанные с ядром STM32F,
Нажмите путь [Библиотеки] -> [CMSIS] -> [CM3] -> [CoreSupport], добавьте «cpre_cm3.c» под файлом;
В соответствии с путем [Библиотеки] -> [CMSIS] -> [CM3] -> [DeviceSupport] -> [ST] -> [STM32F10x] добавьте «system_stm32f10x.c» под файлом
После добавления, как показано:

6: Добавить файлы запуска
Чтобы добавить файл запуска на отдельном компьютере «Запуск», следуйте по пути [Библиотеки] -> [CMSIS] -> [CM3] -> [DeviceSupport] -> [ST] -> [STM32F10x] -> [запуск] -> [рука]

Поскольку STM32F103RCT6 относится к Flash-памяти большой емкости (256 КБ), добавьте файлы здесь“startup_stm32f10x_hd.s“,
Если Flash имеет среднюю емкость (128 КБ или 64 КБ), добавьте“startup_stm32f10x_md.s“,
Интерфейс после запуска папки после добавления выглядит следующим образом.

7: настроить интерфейс компонентов
Нажмите кнопку ОК, вы можете найти еще несколько файловых каталогов в Project:
Нажмите кнопку «Компиляция». Если что-то пойдет не так, просто проигнорируйте это сейчас.

5. Соответствующие настройки проекта
1: настройка параметров цели
Нажмите кнопку настройки проекта [Параметры для цели],

Появится интерфейс настройки

2: Создать HEX-файл
Нажмите вкладку [Output] и сгенерируйте HEX-файл, как показано ниже

3: Выберите путь к выходной папке целевого файла (Obj)
Выберите путь к выходной папке целевого файла (Obj), как показано на рисунке ниже.

4: Выберите путь к папке из списка вывода
Выберите выходной путь к файлу списка.

5: Настройки вкладки C / C ++
Выберите вкладку C / C ++ и введите «USE_STDPERIPH_DRIVER, STM32F10X_HD» в текстовом поле «Определить», как показано на рисунке:

«USE_STDPERIPH_DRIVE» определяет использование периферийной библиотеки, и определение будет включать файл * _conf.h для использования периферийной библиотеки.
«STM32F10X_HD» соответствует файлу автозагрузки startup_stm32f10x_hd.s, который является флэш-памятью большой емкости.
6: добавить * .h путь к файлу
Добавьте все пути к файлам заголовков * .h, которые будут использоваться, в противном случае возникнет сообщение об ошибке, что файл заголовка не может быть найден, как показано на рисунке.

7: Добавить путь [Библиотеки] -> ……
Добавить путь [Библиотеки] -> [STM32F10x_StdPeriph_Driver] -> [inc]
Добавить путь [Библиотеки] -> [CMSIS] -> [CM3]
После добавления пути, как показано на рисунке, нажмите ОК:

Шаблон для такого проекта готов,
6. Создайте успешно скомпилированный файл
Скопируйте файл «Demo», переименуйте его в «LedText» и замените следующий код на main.c
(Когда новый проект будет создан в будущем, содержимое файла «Main.c» файла шаблона можно заменить)
void delay_us ( unsigned int us )
unsigned char n;
void delay_ms ( unsigned int ms )
void GPIO_Configuration( void )
GPIO_SetBits(GPIOA,GPIO_Pin_1); //PA1 = 1
GPIO_SetBits(GPIOA,GPIO_Pin_2); //PA2 = 1
GPIO_SetBits(GPIOB,GPIO_Pin_1); //PB1 = 1
GPIO_ResetBits(GPIOA,GPIO_Pin_1); //PA1 = 0
GPIO_ResetBits(GPIOA,GPIO_Pin_2); //PA2 = 0
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //PB1 = 0
Результат скомпилирован успешно, но обратите внимание, что в программе появится предупреждение. Хотя предупреждение не повлияет на компиляцию программы, предупреждение является потенциальной ошибкой в программе. При наличии ошибки предупреждения ее следует устранить в максимально возможной степени.

Как мы видим в диалоговом окне ниже, он выдаст запрос «# 1-D: последняя строка файла заканчивается без новой строки»
В этом предложении будет предложено добавить круглые скобки после основной функции с пустой строкой. Решение состоит в том, чтобы добавить пустую строку после круглой скобки ">" в конце основной функции.
Следует также отметить, что при создании проекта каждый раз, когда вы добавляете файл «* .c» в «Lib», вам необходимо включить соответствующий файл «* .h» в «stm32f10x_conf.h». На этом этапе следует отметить, что файл «stm32f10x_conf.h» должен быть включен в начало файла.
7. Скачивайте файлы с помощью ST-Link V2
Нажмите на
Введите настройки [Опция для цели]

Выполнив «Шаг 4», как показано на рисунке, введите настройку «Настройки» следующим образом:


При загрузке мастер UP имеет такую проблему, как показано на следующем рисунке:

Эта проблема возникает из-за версии Keil, используемой UP, 5.11. При загрузке с ST-Link V2 существует ошибка. Keil также дал официальное решение (http://www.keil.com/support/docs). /3662.htm), решение выглядит следующим образом:
Войдите в каталог установки keil [ARM] -> [ST-LINK] Откройте «ST-LinkUpgrade.exe», появится инструмент обновления ST-LINK,
После обновления проблема решена (если появится сообщение о невозможности подключения к оборудованию, снова подключите ST-LINK).

Когда отображается содержимое, показанное в красном поле на следующем рисунке, это означает, что соединение является нормальным и может быть загружено в обычном режиме.

Нажмите на значок загрузки «LOAD» на рисунке, загрузка прошла успешно.

Дополнить возникшие проблемы и решения:
1: В коде, скопированном в Keil, как решить проблему, из-за которой китайский комментарий искажен?
Этот тип проблемы является проблемой кодирования текста, решение заключается в следующем: [Правка] -> [Конфигурация]

Установите следующим образом [Редактор] -> [Кодировка] -> [Китайский **** (упрощенный)]:
STM32 Debugging With ST-Link v2 SWD | Serial Wire Viewer

In this tutorial, we’ll discuss how to debug your projects using the ST-Link debugger SWD and the Serial Wire Viewer (SWV) mode. How to open it and print data to the serial wire console within the IDE itself. We’ll also set up breakpoints to stop the MCU at some points in the code to check live variables while the MCU is running your firmware.
Required Components For LABs
All the example code/LABs/projects in the course are going to be done using those boards below.
- Nucleo32-L432KC (ARM Cortex-M4 @ 80MHz) or (eBay)
- Blue Pill STM32-F103 (ARM Cortex-M3 @ 72MHz) or (eBay)
- ST-Link v2 Debugger or (eBay)
- My Digital Storage Oscilloscope (DSO): Siglent SDS1104 (on Amazon.com) (on eBay)
- FeelTech DDS Function Generator: KKMoon FY6900 (on Amazon.com) (on eBay) (on eBay)
Affiliate Disclosure: When you click on links in this section and make a purchase, this can result in this site earning a commission. Affiliate programs and affiliations include, but are not limited to, the eBay Partner Network (EPN) and Amazon.com.
STM32 ARM Cortex-M3 Debug Support
The ARM Cortex®-M3 & M4 core contains hardware extensions for advanced debugging features. The debug extensions allow the core to be stopped either on a given instruction fetch (breakpoint) or data access (watchpoint). When stopped, the core’s internal state and the system’s external state may be examined. Once the examination is complete, the core and the system may be restored and program execution resumed.
The debug features are used by the debugger host when connecting to and debugging the STM32 MCUs.
Two interfaces for debugging are available:
- Serial Wire Debug (SWD)
- JTAG Debug Port
The debug features embedded in the Cortex®-M3 core are a subset of the Arm® CoreSight Design Kit.
We’ll be using the SWD in this tutorial. Down below is a diagram for the ARM Cortex-M3 debugging support hardware. Which includes the ITM for the serial wire trace debugging, and extra more features.

The Arm® Cortex®-M3 core provides integrated on-chip debug support. It is comprised of:
- SWJ-DP: Serial wire / JTAG debug port
- AHP-AP: AHB access port
- ITM: Instrumentation trace macrocell
- FPB: Flash patch breakpoint
- DWT: Data watchpoint trigger
- TPUI: Trace port unit interface (available on larger packages, where the corresponding pins are mapped)
- ETM: Embedded Trace Macrocell (available on larger packages, where the corresponding pins are mapped)
ST-Link v2 (Hardware Debugger)
For Debugging Projects With The Blue Pill Board
Alternatively, there is a hack for the ST-Link v2 USB Clone (the one on the left). So you can solder the SWO pin out to any pin on the header. Typically we’re using only 4 out of the 10pins. So you can route the SWO pin out to any other pin. As shown in this article.
5V pin converted into SWO
While configuring the SWD debugging feature in CubeMX, you’ll notice that the SWO pin is B3. Which you’ll need to connect to ST-Link debugger. The steps for SWD debugging are going to be the same regardless of the target microcontroller.

For Debugging With Nucleo Boards (Nucleo32-L432KC)
Nucleo boards come equipped with an integrated ST-Link v2 programmer/debugger chip. It’s another microcontroller on the board itself. In the case of our Nucleo32L432KC, it’s a small microcontroller on the back of the board. It’s hooked up to the USB port on the board. It gives you full debugging capability while flashing the code easily to the board. It even gets detected as a storage device, so you can just drag and drop the binary file (hex code) to the chip directly and it’s been flashed already without any clicks!
The Target Microcontroller STM32L432KC On The Top Side OF The Board
The ST-Link v2 Programmer / Debugger On The Bottom Side OF The Board. It’s The One Connected To The USB Port On The Board As Well.
Obviously, no extra hardware is needed when you’re using Nucleo Boards. And the debugging steps are the same for all Nucleo boards and the blue pill with ST-Link v2. However, the Nucleo32 boards (the 32-pins small version) like the shown above, doesn’t have the SWO pin connected to the integrated ST-Link debugger
You’ll have to solder a bridge wire across the board with the help of the board schematic to enable this serial wire trace feature. And I won’t do this. I’ll give you the steps to debug with the serial wire viewer just in case you could hack your ST-Link clone or you have a discovery board or a Nucleo-64 maybe that doesn’t lack the connection for the SWO pin.
Create Demo Project & SWV Debug
Step1 : Open CubeMX & Create New Project

Step2 : Choose The Target MCU & Double-Click Its Name

Step3 : Configure All The Peripherals & GPIOs You’re Willing To Use In Your Project!
Whatever your project is. Just do the normal configurations as per the application. To enable the serial wire debugging, you only have to add an extra step which is the one below.
Step4 : Set The Trace Serial Wire Debugging
Note: the pin B3 is now the SWO and needs to be connected to the respective pin on the ST-Link v2 debugger

Step6 : Go To The Clock Configuration
Step7 : Set The System Clock To Be 72MHz Or Whatever You Want

Step8 : Name & Generate The Project Initialization Code For CubeIDE or The IDE You’re Using
Then, open the project in the IDE you’re using. And head over to the main.c file.
You’ll need to add this function to your main.c file before the main function. In case you’re not including the syscalls in your project yet. It gives the implementation for the printf() function so as to print the data over the ITM trace.




