Перейти к содержанию

STM32CubeProgrammer: прошивка STM32 через ST-LINK и загрузчик

STM32CubeProgrammer — бесплатная программа ST для записи, чтения и стирания памяти микроконтроллеров STM32. Она работает через отладчик ST-LINK по SWD или JTAG и через встроенный загрузчик по UART, USB DFU, I²C, SPI и CAN, умеет менять байты конфигурации и снимать защиту от чтения. Разбираем режимы подключения, запись файлов HEX, BIN и ELF, готовые команды STM32_Programmer_CLI, обновление ST-LINK и типичные ошибки.

Обновлено Редакция GAW

STM32CubeProgrammer (STM32CubeProg) — бесплатная программа STMicroelectronics для записи, чтения, проверки и стирания памяти микроконтроллеров и микропроцессоров STM32: внутренней флеш-памяти, ОЗУ, OTP и внешней флеш-памяти, а также байтов конфигурации (option bytes). Она поставляется в двух вариантах — с графическим интерфейсом и консольный STM32_Programmer_CLI для скриптов. Текущая версия — 2.23.0, заметки о выпуске RN0109 Rev 34 (июнь 2026); ссылка на руководство UM2237 на сайте ST теперь ведёт на онлайн-документацию к версии 2.23.0.

STM32CubeProgrammer пришла на смену трём старым программам ST — STM32 ST-LINK Utility, DfuSe и Flash Loader Demonstrator; их выпуск прекращён. Программа бесплатна, но исходный код ST не открывает. Через неё же прошивает флеш-память STM32CubeIDE: ST-LINK GDB server вызывает STM32_Programmer_CLI в режиме подключения под сбросом.

Коротко

  • Версия 2.23.0, лицензия ST SLA0048, Java ставить не нужно: с версии 2.6.0 среда выполнения входит в пакет.
  • ОС: Windows 10 (32 и 64 бита) и 11, Ubuntu 22.04 и 24.04, Fedora 43, macOS 15 и 26 (Intel и Apple Silicon), Raspberry Pi OS на 64-битных платах.
  • Отладочный интерфейс: ST-LINK по SWD или JTAG, SEGGER J-Link только по SWD и только для флеш-памяти и option bytes.
  • Загрузчик: UART, USB DFU, I²C, SPI, CAN — какие из них есть у конкретного STM32, сказано в AN2606.
  • Файлы: BIN, Intel HEX, ELF (.elf, .axf, .out), Motorola S-record; для BIN адрес задаётся вручную.
  • Подключение под сбросом (mode=UR) спасает, когда прошивка отключила выводы SWD; нужен провод NRST.
  • Снятие защиты RDP с уровня 1 на 0 стирает флеш-память — это делает сам микроконтроллер.

Установка и требования

Пакет скачивается со страницы STM32CubeProg на st.com: отдельные архивы для 32- и 64-битной Windows, macOS на Apple Silicon и Intel, Linux x86-64 и Linux Arm. Внутри — установщик SetupSTM32CubeProgrammer-x.y.z (.exe, .linux или .app); консольную версию для 64-битного Linux на Arm можно поставить и Debian-пакетом.

ПараметрТребование (RN0109 Rev 34, документация 2.23.0)
Windows10 — 32 и 64 бита; 11 — 64 бита
LinuxUbuntu LTS 22.04 и 24.04, Fedora 43; libusb 1.0.12 или новее
macOS15 Sequoia и 26 Tahoe, процессоры x86-64 и Apple Silicon
Raspberry PiRaspberry Pi OS на Debian 12 или новее, только 64-битные платы
Javaне нужна с версии 2.6.0 (встроена BellSoft Liberica)
Экранне меньше 1024 × 768

Драйверы. В Windows драйвер ST-LINK ставится файлом stlink_winusb_install.bat из папки Driver/stsw-link009_v3 пакета. По техническому примечанию TN1235 для ST-LINK/V2 и V2-1 в Windows 10 и 11 он обязателен, для STLINK-V3 — нет; если подключить ST-LINK/V2 до установки драйвера, часть его интерфейсов система покажет как неизвестные устройства. Для USB DFU нужен свой драйвер — файл STM32 Bootloader.bat; если в системе стоит драйвер старой программы DfuSe, его сначала удаляют и перезагружают компьютер.

В Linux нужен пакет libusb (sudo apt-get install libusb-1.0.0-dev в Ubuntu, sudo dnf install libusb1 в Fedora), а чтобы ST-LINK, J-Link и устройства DFU были доступны без прав администратора — правила udev из папки Driver/rules:

sudo cp *.* /etc/udev/rules.d

В macOS ST-LINK работает без драйвера.

Чем подключаться

Подключение выбирают в панели настройки цели: ST-LINK, J-Link или один из интерфейсов встроенного загрузчика. Кнопка обновления рядом показывает найденные устройства — серийные номера программаторов, COM-порты или устройства USB в режиме DFU.

ИнтерфейсЧто нужноЗапуск в CLI
SWD, JTAGST-LINK: отдельный или встроенный в плату Nucleo или Discovery-c port=SWD, -c port=JTAG
SWD через J-LinkSEGGER J-Link; только запись флеш-памяти и option bytes, частота 4 МГц-c port=JLINK
UARTUSB-UART-адаптер, микроконтроллер в режиме загрузчика-c port=COM5 br=115200
USB DFUкабель USB, микроконтроллер с USB-загрузчиком в режиме загрузчика-c port=usb1
SPI, I²C, CANмост STLINK-V3 (STLINK-V3SET с платой-адаптером, STLINK-V3PWR), загрузчик с этим интерфейсом-c port=SPI, port=I2C add=…, port=CAN

Встроенный загрузчик находится в системной памяти STM32 и запускается, если при сбросе выводы BOOT или байты конфигурации выбирают загрузку из неё. Какие интерфейсы есть у загрузчика конкретной серии и на каких выводах, перечислено в примечании ST AN2606, а как устроены загрузчик и выводы BOOT у STM32F1 и STM32F4 — на странице «Flash и загрузчик STM32». Для UART руководство UM2237 требует чётность «even», 8 бит данных, 1 стоповый бит и выключенное управление потоком; линии RTS и DTR адаптера можно выставить в нужный уровень (rts=low, dtr=high). USB DFU по умолчанию ищет устройство с идентификаторами ST: VID 0x0483, PID 0xDF11. Для I²C адрес загрузчика обязателен и зависит от серии: в примере ST для STM32F42xxx это 0x38.

Режим (CLI)Что происходитКогда нужен
Normal (mode=NORMAL, по умолчанию)микроконтроллер сбрасывается и останавливается; способ сброса задаёт Reset modeобычная прошивка
Connect under reset (mode=UR)подключение с перехватом вектора сброса, до выполнения первой команды программы; сброс всегда аппаратныйпрошивка отключает выводы SWD/JTAG
Hot plug (mode=HOTPLUG)подключение без остановки и без сбросапосмотреть или поправить ОЗУ и регистры работающей программы
Power down (mode=POWERDOWN)перевод в режим отладки, даже если программа ещё не запускалась после подачи питаниянужен провод сброса; на некоторых платах ST с ключом питания STMPS2141 работает не полностью
hwRstPulse (mode=hwRstPulse)импульс сброса, затем подключение; программа успевает стартоватьсерии без подключения под сбросом, например STM32WB0x и STM32WL33

Reset mode выбирает, как сбрасывать микроконтроллер: программно через регистр AIRCR ядра (Software system reset, в CLI reset=SWrst, по умолчанию), выводом NRST (Hardware reset, HWrst) или сбросом только ядра Cortex-M, без периферии (Core reset, Crst; у Cortex-M33, M55 и M85 его нет). Аппаратный сброс и подключение под сбросом работают, только если вывод сброса ST-LINK соединён с NRST микроконтроллера: у ST-LINK/V2 это контакт 15 20-контактного разъёма, у STLINK-V3 с разъёмом STDC14 — контакт 12, у встроенного ST-LINK плат Nucleo — контакт 5 разъёма SWD. Расположение контактов — на странице «Распиновка JTAG и SWD».

В той же панели видны напряжение питания цели, измеренное программатором, и версия прошивки ST-LINK. Режим Shared разрешает нескольким программам — например, STM32CubeProgrammer и отладчику среды — одновременно работать с одним ST-LINK; по документации ST этот режим поддерживается только в Windows. Если ST-LINK подключено несколько, нужный выбирают по серийному номеру (sn=…).

Частота. ST-LINK поддерживает только фиксированный ряд частот, и введённое значение округляется до ближайшего большего из ряда (UM2237):

ПрограмматорSWD, кГцJTAG, кГцПо умолчанию в STM32CubeProgrammer
ST-LINK/V2, V2-14000, 1800, 950, 480, 240, 125, 100, 50, 25, 15, 59000, 4500, 2250, 1125, 562, 281, 140SWD 4000, JTAG 9000
STLINK-V324 000, 8000, 3300, 1000, 200, 50, 521 333, 16 000, 12 000, 8000, 1777, 750SWD 24 000, JTAG 21 333

Это умолчания самой программы: в руководстве UM1075 у ST-LINK/V2 собственные значения по умолчанию — SWD 1,8 МГц и JTAG 1,125 МГц. При проблемах с монтажом — длинных проводах, макетной плате — частоту снижают ключом freq= (в килогерцах). JTAG есть не у всех ST-LINK, встроенных в платы Nucleo и Discovery, а выбор частоты JTAG работает с прошивкой ST-LINK V2J23 и новее.

Запись, проверка и стирание в графической программе

После нажатия Connect в панели появляются сведения о микроконтроллере. Дальше работают три вкладки слева.

  • Memory & File editing — чтение памяти: адрес, размер, кнопка Read или Read All для всей флеш-памяти. Прочитанное сохраняется в .bin, .hex или .srec. Здесь же открывают файл прошивки и сравнивают его с памятью.
  • Erasing & Programming — выбрать файл, для .bin указать адрес, отметить нужные флажки и нажать Start Programming. Verify after programming читает записанное и сравнивает с файлом побайтно, Skip flash memory erase пропускает стирание (только если память заведомо чистая), Run after programming запускает программу. Там же стирают отдельные секторы или всю память кнопкой Full chip erase.
  • Option bytes — байты конфигурации, сгруппированные по назначению, с описанием каждого бита; кнопка Apply записывает изменения и проверяет их.

Адрес записи. Файлы HEX, S-record и ELF содержат адреса внутри, поэтому программа берёт их из файла. В BIN-файле адресов нет — его нужно указать самому; для программы, которая стартует из флеш-памяти STM32, это обычно 0x08000000. Чем различаются форматы и как получить из ELF файл HEX или BIN — в статье «Файлы прошивки: HEX, BIN, ELF».

Плата Nucleo или Discovery. ST советует подключать её к компьютеру разъёмом USB со стороны ST-LINK (на платах с двумя одинаковыми разъёмами второй — USB USER) и проверить, что перемычка выбора питания стоит в положении питания от ST-LINK. Затем Connect, вкладка Erasing & Programming, выбрать файл кнопкой Browse и нажать Start Programming.

Командная строка: STM32_Programmer_CLI

Консольная программа лежит в папке bin установленной STM32CubeProgrammer:

ОСПуть
Windows…\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe
Linux…/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32_Programmer_CLI
macOS, Apple SiliconSTM32CubeProgrammer.app/Contents/Resources/bin/STM32_Programmer_CLI
macOS, IntelSTM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI

Почти все действия требуют сначала подключиться ключом -c port=… с параметрами (без него работает, например, -l); ключ проверки -v ставят сразу после -w, иначе он игнорируется.

# список ST-LINK, COM-портов и устройств DFU
STM32_Programmer_CLI -l

# записать HEX через ST-LINK, проверить и сбросить микроконтроллер
STM32_Programmer_CLI -c port=SWD -w firmware.hex -v -rst

# записать BIN с адреса 0x08000000 и запустить программу с этого адреса
STM32_Programmer_CLI -c port=SWD -w firmware.bin 0x08000000 -v -s 0x08000000

# подключиться под сбросом на пониженной частоте и стереть всю флеш-память
STM32_Programmer_CLI -c port=SWD mode=UR freq=1000 -e all

# сохранить 64 КБ флеш-памяти в файл
STM32_Programmer_CLI -c port=SWD -r 0x08000000 0x10000 backup.bin

# прошивка через встроенный загрузчик: UART и USB DFU
STM32_Programmer_CLI -c port=COM5 br=115200 -w firmware.bin 0x08000000 -v
STM32_Programmer_CLI -c port=usb1 -w firmware.hex
КлючЧто делает
-c port=SWD (JTAG, JLINK, COM5, usb1, SPI, I2C, CAN)подключение; для ST-LINK — ещё freq=, mode=, reset=, sn=, ap=, shared
-w файл [адрес] (-d)запись, перед которой память стирается; адрес обязателен для BIN
-w файл адрес incrementalзаписать только изменившиеся секторы; если такая прошивка уже в памяти, запись не выполняется
-v, -v fastпроверка: побайтно или по контрольным суммам секторов; работает только сразу после -w
-e all, -e 2 4, -e [5 10]стереть всю флеш-память (без области EEPROM), отдельные секторы или диапазон секторов
-r адрес размер файл (--upload)прочитать память в двоичный файл
-s [адрес] (--start, -g)запустить программу с адреса
-rst, -hardRstпрограммный сброс; аппаратный сброс выводом NRST
-ob displ, -ob ИМЯ=значениепоказать все option bytes или записать байт
-rduснять защиту от чтения: RDP с уровня 1 на уровень 0
-vb 3, -log файл.logподробный вывод (уровни 1–3); записать весь обмен в файл

Для параллельной прошивки нескольких плат запускают несколько экземпляров программы, и каждому указывают серийный номер своего ST-LINK: -c port=SWD sn=…. При этом ST в FAQ к версии 2.23.0 подчёркивает, что STM32CubeProgrammer — инструмент разработки и по условиям лицензии не предназначен для серийного программирования на производстве.

Option bytes и защита от чтения

Байты конфигурации (option bytes) — отдельная область флеш-памяти, где хранятся настройки микроконтроллера: уровень защиты от чтения, защита секторов от записи, режим сторожевого таймера, выбор загрузки и другие. Их набор и имена у каждой серии свои, поэтому сначала стоит посмотреть, как их называет сама программа:

STM32_Programmer_CLI -c port=SWD -ob displ

Байт RDP задаёт защиту от чтения. На уровне 1 отладчик и загрузчик не могут читать флеш-память, но программа в ней работает как обычно. Снимают защиту командой -rdu или сменой RDP на вкладке Option bytes. Главное последствие задаёт сам микроконтроллер, а не программа: у STM32F1 перед снятием защиты стирается вся основная флеш-память (PM0075, разд. 2.4.1), у STM32F4 переход с уровня 1 на 0 стирает флеш-память и резервную SRAM (RM0090, разд. 3.7.3). Поэтому снятие RDP — способ вернуть заблокированный микроконтроллер к жизни, а не прочитать чужую прошивку. Если защиту меняли через отладчик, после этого нужен сброс по питанию: отключите и снова подайте питание платы (PM0075, RM0090); при снятии через загрузчик у STM32F1 достаточно системного сброса. У STM32F1 уровней нет: защита либо включена, либо снята, а уровня 2 у этой серии не существует (PM0075). Для других серий порядок описан в их reference manual.

У новых серий STM32 есть и другие механизмы: снятие защиты по паролю (RDP regression with password) и аутентификация отладки (Debug Authentication). STM32CubeProgrammer работает с ними на отдельных вкладках; по списку известных ограничений версии 2.23.0, снятие RDP по паролю и возврат к заводским настройкам поддерживаются только через ST-LINK.

Драйвер из пакета STM32CubeProgrammer рассчитан на ST-LINK/V2, ST-LINK/V2-1 (его встраивают в платы ST), STLINK-V3 и STLINK-V3PWR. Различия, которые видны при работе с программой:

ST-LINK/V2STLINK-V3
SWD / JTAG в STM32CubeProgrammerдо 4000 / 9000 кГцдо 24 000 / 21 333 кГц
Напряжение цели (SWD/JTAG)1,65–3,6 В, выходы уровня 3,3 ВV3MINIE — 1,65–3,6 В; V3SET — 3–3,6 В, с адаптером B-STLINK-VOLT от 1,65 В
Загрузчик по SPI, I²C, CANнетмост у STLINK-V3SET (через плату-адаптер) и STLINK-V3PWR
Драйвер в Windows 10 и 11обязателенне обязателен

Подробное сравнение с J-Link, CMSIS-DAP и программаторами для других семейств — в статье «Программаторы и отладчики».

Обновление прошивки ST-LINK. Версия прошивки показана в панели настроек ST-LINK, рядом — кнопка обновления. Есть и отдельная программа STLinkUpgrade из пакета STSW-LINK007 (вариант .exe для Windows и .jar для Windows, Linux и macOS); она сама определяет модель и подбирает прошивку. Прерывать обновление нельзя: по TN1235 сбой на этом этапе может сделать программатор трудно восстановимым или вовсе неработоспособным. Некоторые функции требуют свежей прошивки: например, для поиска нескольких микроконтроллеров на одной шине SWD (команда -getTargetSelList) старая прошивка выдаёт сообщение «Too Old Firmware, please upgrade your STLINK!».

Светодиод COM на ST-LINK подсказывает, где сбой (UM1075, TN1235): мигает красным и затем горит оранжевым — компьютер не смог определить USB-устройство (проверить кабель и разъём); горит оранжевым — последний обмен с микроконтроллером не удался; зелёный — последний обмен прошёл успешно.

Частые ошибки

В руководстве ST расшифровано только сообщение команды -getTargetSelList: «No STM32 Target Found!» — ни одной платы не найдено. Остальные сообщения о неудачном подключении ST не описывает, поэтому ниже — проверки, которые следуют из документации на программу и программатор.

СимптомЧто проверить
ST-LINK нет в спискекабель и разъём USB (светодиод COM мигает красным, потом оранжевый); драйвер STSW-LINK009 для ST-LINK/V2 в Windows; правила udev и libusb в Linux; не занят ли ST-LINK другой программой — тогда режим Shared (только в Windows)
«No STM32 target found», «Can not connect to target»питание платы — напряжение цели видно в панели ST-LINK; провода SWDIO, SWCLK и GND; вывод 1 (VAPP) ST-LINK/V2 соединён с питанием платы; частота ниже (freq=1000 или меньше); режим Connect under reset с проводом NRST
Подключалось, но после прошивки пересталопрограмма отключает выводы SWD или засыпает — подключение под сбросом или запуск с BOOT0 = 1; разбор в ответе «ST-LINK перестал видеть STM32 после прошивки»
Подключение есть, но чтение и запись флеш-памяти не проходятвключена защита от чтения RDP — посмотреть -ob displ, снять -rdu (флеш-память сотрётся)
В DFU устройство не видномикроконтроллер не в режиме загрузчика (BOOT0); у серии нет USB-загрузчика (AN2606); стоит старый драйвер DfuSe вместо драйвера STM32CubeProgrammer
UART-загрузчик не отвечаетрежим загрузчика, перекрёстное соединение TX и RX, интерфейс и выводы загрузчика по AN2606, меньшая скорость br=

Если причина не видна, добавьте к команде -vb 3 или -log trace.log — программа запишет весь обмен с программатором, и по нему видно, на каком шаге он оборвался. Список исправленных и известных ошибок каждой версии ST ведёт на своей вики (нужна учётная запись).

Как подключить ST-LINK к плате, показано на странице «Распиновка JTAG и SWD», а сравнение STM32CubeProgrammer с другими утилитами прошивки — в обзоре «Программы для электронщика».

Частые вопросы

Как прошить STM32 через ST-LINK из командной строки?

Командой STM32_Programmer_CLI -c port=SWD -w firmware.hex -v -rst: подключиться по SWD, записать файл, проверить запись и сбросить микроконтроллер. Для файла .bin после имени нужно указать адрес, обычно 0x08000000 — начало флеш-памяти STM32. Ключ -v работает, только если стоит сразу после -w.

Что такое Connect under reset в STM32CubeProgrammer?

Режим подключения, при котором программатор подключается к ядру, пока микроконтроллер удерживается в сбросе, и ловит вектор сброса до выполнения первой команды программы. Он нужен, например, когда прошивка отключает выводы SWD или JTAG. Для него вывод NRST микроконтроллера соединяют с выводом сброса ST-LINK: у ST-LINK/V2 это контакт 15 20-контактного разъёма, у STLINK-V3 с разъёмом STDC14 — контакт 12, у встроенного ST-LINK плат Nucleo — контакт 5 разъёма SWD. В командной строке — mode=UR.

Как снять защиту от чтения STM32 в STM32CubeProgrammer?

Командой STM32_Programmer_CLI -c port=SWD -rdu: она переводит RDP с уровня 1 на уровень 0. В графической программе то же делают на вкладке Option bytes, сменив значение RDP и нажав Apply. Микроконтроллер при этом стирает флеш-память, поэтому прошивку так не прочитать; после снятия защиты через отладчик нужен сброс по питанию. Уровень 2 у STM32F4 необратим — его не снять ничем; у STM32F1 уровня 2 нет.

Нужен ли ST-LINK, чтобы прошить STM32 в STM32CubeProgrammer?

Нет. ST-LINK нужен для SWD и JTAG, а через встроенный загрузчик STM32 прошивается по UART через USB-UART-адаптер или по USB DFU, если загрузчик конкретного микроконтроллера поддерживает USB. Для этого микроконтроллер запускают в режиме загрузчика выводом BOOT0. Для загрузчика по SPI, I²C и CAN нужен мост STLINK-V3.

Как обновить прошивку ST-LINK?

В STM32CubeProgrammer — кнопкой обновления рядом с версией прошивки в панели настроек ST-LINK, либо отдельной программой STLinkUpgrade из пакета STSW-LINK007: она сама определяет модель программатора. Обновление нельзя прерывать — ST предупреждает, что программатор может стать неработоспособным.

Источники

  1. STMicroelectronics. RN0109 Rev 34. STM32CubeProgrammer release v2.23.0, июнь 2026 — поддерживаемые ОС и архитектуры, JRE в составе пакета с версии 2.6.0, лицензия SLA0048, новое в версии 2.23.0, поддержка STLINK-V3PWR
  2. STMicroelectronics. STM32CubeProgrammer 2.23.0 documentation (онлайн-версия руководства UM2237) — системные требования, установка и драйверы, настройки ST-LINK и режимы подключения, команды -c, -e, -w, -v, -r, -ob, -rdu, -vb, -log, путь к STM32_Programmer_CLI, FAQ, известные ограничения
  3. STMicroelectronics. UM2237 Rev 29. STM32CubeProgrammer software description, ноябрь 2025 — панели GUI, настройки UART, SPI, I2C и CAN, частоты SWD и JTAG для ST-LINK/V2 и STLINK-V3, команды CLI с примерами, сообщения команды -getTargetSelList
  4. STMicroelectronics. STM32CubeProg — страница продукта — версии GUI и CLI, интерфейсы, форматы файлов, текущая версия 2.23.0 и пакеты для разных ОС
  5. STMicroelectronics. UM1075 Rev 10 (апрель 2024), UM2448 Rev 9 (апрель 2025), TN1235 Rev 7 (январь 2025) — ST-LINK/V2 и STLINK-V3: интерфейсы и частоты, разъём и выводы VAPP и NRST, светодиод COM, обновление прошивки STLinkUpgrade (STSW-LINK007), драйверы Windows, Linux и macOS
  6. STMicroelectronics. PM0075 Rev 2 (август 2012) и RM0090 Rev 21 (июнь 2024) — PM0075 разд. 2.4.1 — снятие защиты STM32F1 стирает основную флеш-память; RM0090 разд. 3.7.3 — уровни RDP STM32F4, переход 1 → 0 со стиранием, необратимый уровень 2
  7. STMicroelectronics. UM2609 Rev 18. STM32CubeIDE user guide, июнь 2026 — ST-LINK GDB server прошивает флеш-память через STM32_Programmer_CLI с mode=UR reset=hwRst

Нашли ошибку?