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

Программатор ST-Link (фирменный ST-LINK/V2, клоны на алюминиевом корпусе или встроенный в отладочные платы Nucleo и Discovery) работает с микроконтроллерами STM32 по двум интерфейсам: SWD (основной, два сигнальных провода) и JTAG (больше линий, используется реже). В этой статье разберём подключение, выбор программы для прошивки, пошаговый процесс записи firmware и диагностику типичных сбоев.

Для прошивки по SWD достаточно четырёх линий: SWDIO, SWCLK, GND и питание. На большинстве плат STM32 выводы SWD подписаны и вынесены на гребёнку; на «голых» микроконтроллерах их расположение зависит от корпуса — сверяйтесь с datasheet конкретного чипа, а не с чужими схемами.

  • 🔌 GND — соедините земли программатора и целевой платы первым делом; без общей земли связь невозможна.
  • 📡 SWDIO — линия данных, соединяется с соответствующим выводом МК (на многих STM32 это PA13).
  • ⏱️ SWCLK — линия тактирования (часто PA14).
  • 🔋 3.3V / VCC — питание целевой платы, если она не запитана отдельно.
  • 🔄 NRST — опционально, нужен для режима Connect Under Reset при проблемных чипах.

⚠️ Внимание: многие клоны ST-Link на пин 3.3V выводят напряжение со своего стабилизатора, а пин 5V соединён напрямую с USB. Не подавайте 5 В на питание платы, рассчитанной на 3.3 В, и не запитывайте плату одновременно от ST-Link и от внешнего источника — возможен конфликт источников питания.

Длина проводов SWD тоже имеет значение: при длинных или неэкранированных шлейфах связь может быть нестабильной. Если прошивка обрывается на середине, сократите провода до 10–15 см и снизьте скорость SWD в настройках программы.

Выбор программы для прошивки

Существует несколько рабочих инструментов, и выбор зависит от задачи. STM32CubeProgrammer — актуальная официальная утилита STMicroelectronics с графическим интерфейсом и консольным режимом; именно её стоит ставить в первую очередь. Старенькая ST-Link Utility больше не развивается, но до сих пор встречается в старых инструкциях и работает на простых задачах.

ПрограммаТипКогда использовать
STM32CubeProgrammerGUI + CLIОсновной современный вариант, поддержка всех серий STM32
ST-Link UtilityGUIУстаревшая, подходит для простых задач на старых ПК
OpenOCDКонсольАвтоматизация, CI, интеграция с Eclipse/VS Code
STM32CubeIDEIDEПрошивка прямо из среды разработки вместе с отладкой

Для разовой прошивки готового файла .hex или .bin проще всего использовать CubeProgrammer. Если вы разрабатываете проект в STM32CubeIDE, прошивка выполняется кнопкой Run/Debug без сторонних утилит — среда сама вызывает программатор.

📊 Какой программой вы прошиваете STM32?
STM32CubeProgrammer
ST-Link Utility
OpenOCD
Прямо из IDE (CubeIDE/Keil)

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

Процесс занимает пару минут, если подключение корректно. Установите CubeProgrammer с официального сайта ST (потребуется бесплатная регистрация), подключите ST-Link к USB и плату — к программатору.

В правой части окна выберите тип подключения ST-LINK, при необходимости задайте скорость и режим (Normal, Connect Under Reset или Hot Plug), затем нажмите Connect. При успехе в логе появится идентификатор чипа и объём флеш-памяти.

☑️ Прошивка STM32 через CubeProgrammer

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

На вкладке Erasing & Programming укажите путь к файлу прошивки. Для .hex стартовый адрес подставляется автоматически; для .bin его нужно задать вручную — обычно это начало флеш-памяти 0x08000000, но для некоторых серий (например, с банками памяти или загрузчиком) адрес может отличаться, проверяйте документацию на проект.

💡

Включите галочку Verify programming — программа сверит записанные данные с файлом и сразу покажет ошибку, если запись прошла сбойно.

Нажмите Start Programming. После завершения и верификации отключитесь кнопкой Disconnect и сбросьте плату кнопкой RESET или передёргиванием питания — программа запустится.

Прошивка через OpenOCD и командную строку

Для автоматизации удобнее консольные инструменты. У CubeProgrammer есть CLI-версия STM32_Programmer_CLI, а OpenOCD позволяет прошивать и отлаживать из скриптов. Пример команды для OpenOCD с ST-Link:

openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "program firmware.elf verify reset exit"

Конфигурационный файл target должен соответствовать вашему семейству — stm32f1x.cfg, stm32f4x.cfg, stm32g0x.cfg и так далее. Если точного конфига под ваш чип нет, возьмите ближайший по семейству из поставки OpenOCD, но проверяйте результат верификацией.

Консольный вариант CubeProgrammer выглядит так:

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

Здесь -c port=SWD — подключение, -w — запись файла, -v — верификация, -rst — сброс после прошивки.

Обновление прошивки самого ST-Link

Встроенные ST-Link на платах Nucleo/Discovery и фирменные ST-LINK/V2 иногда требуют обновления собственной прошивки для работы с новыми чипами. Используйте утилиту STM32CubeProgrammer (кнопка Firmware upgrade) или отдельный STSW-LINK007 с сайта ST. Клоны сторонних производителей обновлять этой утилитой не стоит — они могут перестать определяться.

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

Разберём сбои, которые встречаются чаще всего. Сообщение No STM32 target found при физически исправном подключении обычно указывает на то, что прошивка в чипе отключила пины SWD (переназначила их как GPIO) или микроконтроллер находится в глубоком сне. Решение — режим Connect Under Reset с подключённым проводом NRST: программатор удерживает чип в сбросе и подключается до старта пользовательского кода.

⚠️ Внимание: если включена защита от чтения RDP Level 1 или выше, содержимое флеша недоступно, а при Level 2 отладка блокируется необратимо. Снятие Level 1 выполняется через CubeProgrammer (меню option bytes, регрессия RDP) и сопровождается полным стиранием чипа. Level 2 не снимается — не включайте его, если не уверены.

Ошибки верификации (verify failed) при успешной записи чаще всего связаны с нестабильным питанием или слишком высокой скоростью SWD. Снизьте частоту в настройках подключения и проверьте, что плата получает достаточный ток.

  • 🧩 Error: Flash download failed — попробуйте полное стирание чипа (Full chip erase) перед записью.
  • 🔒 Cannot access memory / RDP active — проверьте option bytes и уровень защиты.
  • 🔁 Отладчик не определяется ПК — переустановите драйвер ST-Link (идёт в комплекте с CubeProgrammer) или смените USB-порт и кабель.
  • Связь рвётся случайным образом — укоротите провода SWD и уменьшите скорость.
💡

Большинство проблем прошивки STM32 через ST-Link решается тремя действиями: проверкой общей земли и питания, режимом Connect Under Reset и снижением скорости SWD.

Особенности отдельных сценариев

Прошивка «чистого» микроконтроллера на собственной плате ничем не отличается от работы с отладочной, но есть нюанс: на кастомной плате убедитесь, что вывод BOOT0 притянут к земле (через резистор или напрямую), иначе чип может стартовать в системный загрузчик, и поведение после прошивки будет неожиданным. Точные требования к цепям BOOT и питанию для вашего корпуса приведены в datasheet и в рекомендациях ST по разводке (application notes по hardware design).

Если вы прошиваете устройство, где уже стоит загрузчик (например, в 3D-принтерах, дронах или DIY-контроллерах), стартовый адрес приложения может быть смещён — типичный пример 0x08004000 или иной, заданный конкретным загрузчиком. Запись приложения по нулевому адресу затрёт загрузчик. Перед прошивкой устройства со сторонним загрузчиком узнайте его карту памяти из документации проекта — восстановить загрузчик без исходника бывает невозможно.

Отдельный случай — восстановление «залоченных» клонов и плат, где SWD отключён программно, а NRST не разведён. Иногда помогает многократное нажатие Connect с одновременным ручным сбросом платы кнопкой: цель — поймать момент между сбросом и стартом кода. Это не гарантированный метод, но безаппаратных альтернатив в такой ситуации немного.

💡

Сохраните дамп заводской прошивки через Read (вкладка Memory & File edition → Save) перед первой перепрошивкой устройства — это ваша страховка для отката.

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

Можно ли прошить STM32 без провода NRST?

Да, в штатном режиме достаточно SWDIO, SWCLK, GND и питания. NRST нужен только для режима Connect Under Reset, когда чип не отвечает из-за отключённых пинов SWD или спящего режима.

Чем отличается SWD от JTAG при прошивке?

SWD использует два сигнальных провода вместо четырёх-пяти у JTAG и является стандартом де-факто для STM32. По скорости и возможностям прошивки разницы для пользователя практически нет; JTAG нужен в основном для специфических отладочных задач и boundary scan.

Почему CubeProgrammer не видит ST-Link, хотя Windows его определяет?

Возможные причины: устаревшая прошивка самого ST-Link (обновите через Firmware upgrade), конфликт драйверов (переустановите драйвер из комплекта CubeProgrammer) или то, что ST-Link уже занят другой программой — закройте IDE и другие утилиты, работающие с отладчиком.

Какой адрес указывать для .bin файла?

Для прошивки без загрузчика — начало флеш-памяти, обычно 0x08000000. Если в устройстве есть загрузчик, адрес приложения смещён и должен быть указан в документации проекта. Файлы .hex и .elf содержат адреса внутри себя и не требуют ручного ввода.

Можно ли использовать китайский клон ST-Link?

Клоны на базе STM32F103 в целом работают с CubeProgrammer и OpenOCD, но официальное обновление их прошивки утилитами ST может вывести их из строя. Для стабильной работы и гарантированной совместимости с новыми сериями чипов предпочтительнее оригинальный ST-LINK или встроенный отладчик плат Nucleo.