Все платы Nucleo оснащены программатором, который можно пере использовать для программирования внешних устройств. Выглядит это примерно так.

От платы Nucleo откалывается часть, которая называется программатор ST-Link/V2-1. Работает она по двум интерфейсам: SWD и UART.

SWD - двухпроводной полудуплексный интерфейс для программирования микроконтроллеров.
UART - двухпроводной полнодуплексный интерфейс для передачи данных между микроконтроллером и PC.
target устройство - то, что мы программируем. Электронная плата с микроконтроллером.

Из документов вам потребуется 68 страничный pdf с названием User manual STM32 Nucleo-64 boards (UN1724). Даташит для STM32F103CBT6.

Что потребуется из оборудования?

Оборудование

Назначение

Программатор ST-Link/V2-1

Переходник между интерфейсом USB и интерфейсом SWD

Кабель USBa-USBmini

Для соединения LapTopa и программатора

Перемычки гнездо-гнездо

Для соединения внешней PCB и программатора по интерфейсам SWD и UART.

Target устройство

То что мы будем программировать

Аппаратная часть

Ядром программатора является микроконтроллер STM32F103CBT6.

Электрическая цель программатора широко известна и свободно скачивается ST-LINK/V2-1

Чтобы переключить программатор в боевой режим программирования внешних плат надо открепить два джампера от разъёма CN2.

Программирование происходит через 6ти пиновый разъём CN4. На CN4 выведен интерфейс SWD. По выбору пинов можно заметить, что в прошивке ST-Link-а интерфейс SWD реализован скорее либо на основе SPI, либо программно на GPIO.

Pin

Name

Dir for PCB

WireName

GPIO

Пояснение

1

VDD_TARGET

in

--

--

Детектор напряжения на стороне target. По сути СN4.1 это однобитный ADC. Компаратор.

2

SWCLK

out

T_JTCK

PB13

тактирование SWD шины

3

GND

in

--

--

заземление

4

SWDIO

io

T_JTMS

PB14

провод для данных

5

NRST

out

T_NRST

PB0

сброс target устройства

6

SWO

in

T_SWO

PA10

лог от target устройства

Микроконтроллер воплощает не только программатор но и, внезапно, переходник с USB-UART. Разъём CN3 выводит на улицу USART2.

Pin

Имя провода

Направление для платы

GPIO

PinMux

MCU pin

1

STLINK_TX

out

PA2

USART2_TX

12

2

STLINK_RX

in

PA3

USART2_RX

13

Программная часть

Из ПО вам потребуется

Название программы

Назначение

STM32 ST-Link Utility

Клиентская утилита для программатора (GUI исполнение)

ST-LINK_CLI.exe

Клиентская утилита для программатора. (CLI версия)

TeraTerm

Терминал последовательного порта

Само собой абсолютные пути к бинарям этих утилит следует прописать в переменную PATH. У меня этот путь выглядел так. C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility

При соединении программатора и NetTop PC в операционной системе появляется новое устройство. ST-link debug. Еще появляется виртуальный последовательный порт STMicroelectronics STLink Virtual Com Port (COM4)

Светодиоды. LED устроен так, что не могут одновременно светиться красный и зеленый. При 3,3V светит красный, при 0 V зеленый.

Цвет

Поведение

Смысл

Красный

Мигание

до инициализации

Красный

непрерывный

инициализация прошла успешно

Зеленый

непрерывный

Внешнее устройство проинициализировано

красный-зеленый

мигание

происходит обмен данными между программатором и устройством

оранжевый

непрерывный

сбой в обмене данными


При корректном подключении программатора утилита STM32 ST-Link Utility распознает подключенный программатор и сможет вычитать часть значений физических адресов.

Записывание прошивки

Инициировать процесс перепрошивки можно вот таким скриптом

echo off
cls

set project_name=stm32_board
set project_dir=%cd%
set ARTEFACT_HEX=%project_dir%\build\%project_name%.hex
set FLASH_TOOL=ST-LINK_CLI.exe

set OPTIONS=-c SWD freq=4000 UR  
set OPTIONS=%OPTIONS% -P %ARTEFACT_HEX% 
set OPTIONS=%OPTIONS% -V "after_programming" 
set OPTIONS=%OPTIONS% -Log
set OPTIONS=%OPTIONS% -TVolt
call %FLASH_TOOL% %OPTIONS%
call %FLASH_TOOL% -Rst

Лог записи прошивки

Считывание прошивки

Этой же утилитой можно считать прошивку из микроконтроллера. Это сработает, если при записи не были установлены option bytes для запрета считывания.

echo off
cls

set PROJECT_NAME=read_firmware.bin
set FLASH_TOOL=ST-LINK_CLI.exe
set OPTIONS=-с SWD freq=2000  
set OPTIONS=%OPTIONS% -Dump 0x08000000 0x100000 %PROJECT_NAME%
%FLASH_TOOL% %OPTIONS%  

В консоли появится такой лог считывания прошивки.

Достоинством данного отладчика является то, что в нем помимо интерфейса USB и SWD есть ещё UART. Это позволяет буквально не отходя от кассы поглядывать еще и на printf- отладку, что сыплет микроконтроллер в UART по мере своей прогрузки и работы .

Отладочный сервер

Обладая отладчиком ST-Link/V2-1 вы можете подключить к этому переходнику GDB сервер и отлаживать программу по шагам. Если вы скачаете Atollic TrueSTUDIO, то у вас появится отладочный сервер. Хранится он будет в папке C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver\

echo off
cls

set GDBServerDir="C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver\"
set GDBServerPath=%GDBServerDir%ST-LINK_gdbserver.bat"
cd %GDBServerDir%
call %GDBServerPath% 

Внутри ST-LINK_gdbserver.bat

@echo off
cmd /K "ST-LINK_gdbserver.exe -c config.txt || echo GDB server exited"

Файл с конфигом указывает порт приложения, режим, интерфейс связи с target (SWD) и прочие параметры.

###############################################################
#### ST-LINK_gdbserver - Sample Configuration File
#### Each Line Contains one argument
#### Comment lines begin with #
####
#### Use option -c <config-file> to start with config file
####  ST-LINK_gdbserver -c config.txt
####
#### Using STM32F4_Discovery, 168MHz, SWO Clock 1000 MHz.
####  ST-LINK_gdbserver.exe -e -d -z 61235 -a 168000000 -b 168
####
#### Programming elf file
####  ST-LINK_gdbserver.exe -e -d -j C:\dev\workspace\MyProg\Debug\MyProg.elf
####
#### Get option information
####  ST-LINK_gdbserver.exe -h
####
###############################################################

###############################################################
#  -e                 : Enables persistant mode
###############################################################
-e

###############################################################
#  -f <Log-File>      : Name of log file. Please make sure
#                       that directory not is write protected.
#                     : Example
-f debug.log
###############################################################

###############################################################
#  -l <Log-Level>     : Logging level between 0 & 31
#          0            Disables logging
#          >=1          Enables logging of error messages
#          >=2          Adds warning messages
#          >=4          Adds communication specific messages
#          >=8          Adds all information messages
#          >=16         Adds all HW specific messages
###############################################################
#-l 31

###############################################################
#  -p <Port-Number>   : TCP-Listen Port-Number.
###############################################################
-p 61234

###############################################################
#  -v                 : Enables verbose mode
###############################################################
#-v

###############################################################
#  -r <delay-sec>     : Maximum Delay in status refresh
###############################################################
-r 15

###############################################################
# -d                  : Enables SWD mode
###############################################################
-d

Появится лог пуска отладочного сервера. Запустится процесс, который ожидает подключения по порту 61234.

Далее уже GDB клиентом можно будет отлаживать прошивку по шагам. Как из консоли, так и через eclipse. Подробнее про это написано тут.

Результат

Удалось пристроить старый кусок от платы Nucleo в качестве программатора и отладчика ST-Link. Научился загружать в микроконтроллер *.hex файл через SWD интерфейс. Это простое решение которое порой не стоит ничего.

Источники

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


  1. mlnw
    11.12.2025 18:04

    Фирменных программаторов гораздо больше, чем "ST-Link ISOL"


  1. DanilinS
    11.12.2025 18:04

    Странная статья. Все платы  Nucleo имеют такой программатор. И в инструкции прямо указывается, что при необходимости программатор можно отделить по специальным насечкам и использовать как отдельное устройство. Это штатный функционал платы. Смысл пилить об этом статью?


    1. karenic Автор
      11.12.2025 18:04

      Это инструкция для тех кому сразу вручат этот фрагмент.
      Без объяснения его происхождения. Как было у меня.

      Мне выдали его и сказали, что это программатор.

      Вот и решил написать инструкцию, что делать с этой странной железкой.


    1. qwe101
      11.12.2025 18:04

      Можно штатно. karenic показал, как. Мне было любопытно, я так не делал.


  1. yappari
    11.12.2025 18:04

    Оффтоп, но всё же. Зачем понадобился второй акк?


  1. kipar
    11.12.2025 18:04

    у ISOL преимущество в том что он та-дамм, гальвано-изолированный. Платы управляющие силовой электроникой а также платы в командировках на объекты программируем только таким. Цена опыта - несколько сгоревших программаторов и один сгоревший ноутбук.
    А на столе и без подключения к фазе да, можно и платой nucleo (даже не обязательно отламывать остальную часть) и копеечными китайскими клонами.

    Ну и да, в некоторых случаях вместо st-link utility предпочтительнее взять OpenOCD.


  1. mark_ablov
    11.12.2025 18:04

    Универсальной платы ft232h хватает чтоб через JTAG программировать stm32.


    1. SuperTEHb
      11.12.2025 18:04

      Много где и загрузчик встроенный есть. А отладка? Ещё у этого программатора есть такая функция, что прошивку можно закинуть в целевой микроконтроллер буквально как на флешку проводником.


  1. tklim
    11.12.2025 18:04

    Детектор напряжения на стороне target. По сути СN4.1 это однобитный ADC.

    это "компаратор" на новохипстерском?
    Vtarget - это крайне важный элемент в полноценных программаторах для того чтобы работать с DUT c разным напряжением, а тут все равно будет 3,3в на SWD.

    По выбору пинов можно заметить, что в прошивке ST-Link-а интерфейс SWD реализован скорее либо на основе SPI, либо программно на GPIO.

    А его как-то по-другому, кроме bitbang можно "реализовать" ? (не силен в протоколе, но вряд ли там даже SPI как-то поможет)

    Ну а в общем

    • практически все нормальные отладочные платы можно использовать как программатор/отладчик для внешнего контроллера.

    • также, если денег около нуля, то спокойно можно использовать китайские клоны stlink

    • все манипуляции ("инструкция") абсолютно те же что для вышеуказанных китайских клонов.

    • MiniUSB в 2025 - по истине "самый лучший" разъем для всего.


    1. d_nine
      11.12.2025 18:04

      Ну до MiniUSB в отладочной плате, цена которой чем ближе к нулю, тем лучше для всех, докопаться это конечно такое) Есть желание переплачивать за USB-C? На H7 платах вообще до сих пор micro ставят)


      1. tklim
        11.12.2025 18:04

        То есть по остальным пунктам вопросов нет?)

        Я себе на нескольких платах, которые использовал много, заменил на type-c. Потому как что мини, что микро со временем становятся очень чувствительны к малейшему шевелению.

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


        1. d_nine
          11.12.2025 18:04

          Так остальные вполне справедливы, а статья для кого-то да будет полезна. Хотя бы в части GDB сервера.

          У Миландра на платах вообще зачастую торчит JTAG (на некоторых платах аж 2 сразу), и отдельно программатора в составе платы нет, не считая загрузку по UART.

          В плане надёжности тоже такое, а вот не держать кучу старых кабелей действительно было бы приятно. У ST-шников просто есть n-разновидностей идентичных борд на разных камнях, вот видимо и не заморачиваются с заменой пока что.