Все платы 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 интерфейс. Это простое решение которое порой не стоит ничего.

Источники

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


  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 показал, как. Мне было любопытно, я так не делал.