Прошивка STM32 через ST-Link V2: полное руководство

Подключение микроконтроллера STM32 к клону ST-Link V2 четырьмя проводами по интерфейсу SWD — самый быстрый способ залить прошивку, но именно на этапе соединения допускается больше всего ошибок: перепутанные SWDIO и SWCLK, отсутствие общей земли или питание целевой платы от неподходящего источника приводят к отказу соединения ещё до начала программирования. Если утилита выдаёт «No target connected» или «Cannot connect to target», в первую очередь проверяйте именно физику подключения, а не настройки программы.

В этой статье разберём полный цикл работы с программатором: от распиновки и установки драйверов до загрузки HEX-файла через STM32CubeProgrammer и устранения типичных сбоев. Материал подходит как для оригинальных отладчиков ST, так и для распространённых китайских клонов в металлическом корпусе.

Что понадобится для прошивки

Для работы потребуется сам программатор ST-Link V2 (оригинал или совместимый клон), плата с микроконтроллером STM32, четыре соединительных провода и компьютер с Windows, Linux или macOS. На стороне ПК понадобится утилита программирования — чаще всего используют официальный STM32CubeProgrammer от STMicroelectronics, который распространяется бесплатно.

Обратите внимание: клоны ST-Link V2 обычно работают только по интерфейсу SWD и не поддерживают JTAG. Для прошивки STM32 этого достаточно, поскольку SWD — штатный отладочный интерфейс всей линейки.

  • 🔌 Программатор ST-Link V2 (оригинал или клон)
  • 🧩 Целевая плата с микроконтроллером STM32
  • 🔗 4 провода Dupont (мама–мама или мама–папа)
  • 💻 Утилита STM32CubeProgrammer или ST-LINK Utility
  • 📄 Файл прошивки в формате .hex, .bin или .elf

Распиновка и подключение по SWD

Интерфейс SWD требует минимум четырёх линий: SWDIO (данные), SWCLK (тактирование), GND (общая земля) и 3.3V (контроль напряжения цели или её питание). На платах вроде Blue Pill (STM32F103C8T6) отладочный разъём расположен с торца и подписан прямо на шелкографии: 3V3, SWIO, SWCLK, GND.

Соответствие контактов на клоне ST-Link V2 обычно нанесено на корпус, но у дешёвых клонов маркировка бывает неверной — встречаются экземпляры с перепутанными местами SWDIO и SWCLK. Если соединение не устанавливается при заведомо исправной плате, попробуйте поменять эти два провода местами. Ориентироваться стоит на документацию к конкретному экземпляру программатора.

⚠️ Внимание: контакт 3.3V на ST-Link служит прежде всего для измерения напряжения целевой платы. Не подавайте одновременно питание на цель от программатора и от внешнего источника — это может повредить устройства. Если плата уже запитана отдельно, линию 3.3V всё равно подключите, но не используйте её как второй источник питания.
Контакт ST-LinkКонтакт на плате STM32Назначение
SWDIOSWIO / PA13Линия данных
SWCLKSWCLK / PA14Тактовый сигнал
GNDGNDОбщая земля (обязательно)
3.3V3V3Опорное напряжение / питание цели
NRST (опционально)NRSTАппаратный сброс, нужен для Connect Under Reset
📊 Какой у вас программатор ST-Link?
Оригинальный ST-Link V2
Китайский клон в металлическом корпусе
ST-Link на плате Nucleo/Discovery
Ещё не купил

Установка драйверов и программного обеспечения

На Windows перед первым подключением установите драйвер ST-LINK — он входит в комплект поставки STM32CubeProgrammer либо доступен отдельным пакетом на сайте STMicroelectronics. Без драйвера устройство определится в диспетчере устройств с восклицательным знаком, и утилиты его не увидят.

После установки подключите программатор к USB и проверьте, что он появился в системе без ошибок. На Linux дополнительно могут понадобиться правила udev для доступа к устройству без прав root — они описаны в документации к используемому инструментарию.

Пошаговая прошивка через STM32CubeProgrammer

Запустите STM32CubeProgrammer, в правом верхнем углу выберите тип подключения ST-LINK и нажмите кнопку Connect. При успехе в логе отобразится информация о целевом чипе: семейство, объём Flash и Device ID. Если соединение не установилось — программа выдаст ошибку, и нужно возвращаться к проверке проводки.

Далее откройте вкладку Erasing & Programming, укажите путь к файлу прошивки и нажмите Start Programming. Для файлов формата .bin дополнительно потребуется указать стартовый адрес — для большинства STM32 это начало Flash-памяти 0x08000000. Для .hex и .elf адреса уже содержатся в файле.

☑️ Проверка перед прошивкой

Выполнено: 0 / 5

После завершения загрузки утилита выполнит верификацию записанных данных. Совпадение контрольных сумм означает, что прошивка записана корректно. Микроконтроллер перезапустится и начнёт выполнение новой программы автоматически либо после сброса.

STM32CubeProgrammer CLI — прошивка из командной строки:

STM32_Programmer_CLI -c port=SWD -w firmware.hex -v -rst

Типичные ошибки и их устранение

Самая частая проблема — сообщение No STM32 target found или Cannot connect to target. Возможные причины: перепутаны линии данных и тактирования, отсутствует земля, плата не запитана либо выводы PA13/PA14 в предыдущей прошивке переназначены под другие функции. В последнем случае помогает режим Connect Under Reset (выбирается в настройках подключения) — программатор удерживает чип в сбросе и подключается до старта пользовательского кода.

Ещё одна ситуация — активированная защита от чтения RDP (Read Protection). Тогда попытка подключения завершается ошибкой о защищённом устройстве. Снятие защиты выполняется через опцию отключения RDP в STM32CubeProgrammer, но учтите: при этом содержимое Flash-памяти полностью стирается — так задумано архитектурой защиты.

  • 🔄 Ошибка подключения → проверить SWDIO/SWCLK, землю и питание
  • ⛔ «Device is protected» → снять RDP с полным стиранием чипа
  • 💤 Прошивка заблокировала SWD-пины → использовать Connect Under Reset
  • 🔌 Программатор не виден в системе → переустановить драйвер, сменить USB-порт
⚠️ Внимание: снятие защиты RDP необратимо уничтожает прошивку, находящуюся в микроконтроллере. Если на устройстве находится единственная копия нужной программы, сначала убедитесь, что у вас есть исходный файл прошивки.
Почему помогает Connect Under Reset

Если предыдущая прошивка перевела пины PA13/PA14 в режим GPIO или увела процессор в глубокий сон, отладчик не успевает захватить управление. Режим Connect Under Reset удерживает линию NRST в активном состоянии во время подключения, поэтому ядро не запускает пользовательский код, и SWD остаётся доступным. Для надёжности линию NRST стоит подключить к соответствующему выводу программатора.

В некоторых случаях, особенно со старыми оригинальными адаптерами, STM32CubeProgrammer предложит обновить внутреннюю прошивку программатора через встроенный механизм Firmware upgrade. Это штатная процедура: утилита сама загружает актуальную версию. Без обновления новые версии ПО могут отказываться работать со старым адаптером.

Для клонов ситуация иная: официальный апдейтер может не распознать их или работать некорректно. Если клон стабильно прошивает целевые платы, обновлять его прошивку без необходимости не стоит.

FAQ: частые вопросы

Можно ли прошить STM32 без отпаивания с готового устройства?

Да, если на плате устройства выведены контакты SWD и ничто не мешает подключению. Достаточно найти пины SWDIO, SWCLK, GND и 3.3V, подключить программатор и выполнить стандартную процедуру. Учтите, что прошивка чужого устройства может быть защищена от чтения и записи.

Чем ST-Link отличается от прошивки через UART-загрузчик?

UART-загрузчик (через встроенный bootloader и перемычку BOOT0) не требует программатора, но позволяет только записать прошивку. ST-Link дополнительно даёт пошаговую отладку, чтение памяти, работу с option bytes и не зависит от состояния загрузчика.

Какой максимальной длины могут быть провода SWD?

Чем короче, тем лучше: длинные провода вносят помехи и вызывают сбои связи. На практике используют провода длиной порядка 10–20 см. При проблемах с длинными линиями можно снизить частоту SWD в настройках подключения.

Почему CubeProgrammer не видит клон ST-Link?

Возможные причины: не установлен драйвер, неисправен USB-кабель или порт, либо прошивка клона несовместима с текущей версией утилиты. Проверьте устройство в диспетчере устройств и попробуйте альтернативные инструменты, например OpenOCD.

Можно ли использовать ST-Link для отладки, а не только прошивки?

Да, это его основное предназначение. В средах разработки вроде STM32CubeIDE или Keil через ST-Link доступны точки останова, пошаговое выполнение и просмотр регистров и памяти в реальном времени.