Ошибка No target connected при попытке прошить STM32 через ST-Link почти всегда означает одно из трёх: не подключён или перепутан сигнал SWDIO/SWCLK, отсутствует питание целевой платы, либо микроконтроллер удерживается в сбросе или защищён от чтения. Прежде чем менять программатор или «перепрошивать» сам отладчик, проверьте именно эти три пункта — они закрывают подавляющее большинство проблем с подключением.
Программатор ST-Link (фирменный ST-LINK/V2, клоны на алюминиевом корпусе или встроенный в отладочные платы Nucleo и Discovery) работает с микроконтроллерами STM32 по двум интерфейсам: SWD (основной, два сигнальных провода) и JTAG (больше линий, используется реже). В этой статье разберём подключение, выбор программы для прошивки, пошаговый процесс записи firmware и диагностику типичных сбоев.
Подключение ST-Link к плате STM32
Для прошивки по 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 больше не развивается, но до сих пор встречается в старых инструкциях и работает на простых задачах.
| Программа | Тип | Когда использовать |
|---|---|---|
| STM32CubeProgrammer | GUI + CLI | Основной современный вариант, поддержка всех серий STM32 |
| ST-Link Utility | GUI | Устаревшая, подходит для простых задач на старых ПК |
| OpenOCD | Консоль | Автоматизация, CI, интеграция с Eclipse/VS Code |
| STM32CubeIDE | IDE | Прошивка прямо из среды разработки вместе с отладкой |
Для разовой прошивки готового файла .hex или .bin проще всего использовать CubeProgrammer. Если вы разрабатываете проект в STM32CubeIDE, прошивка выполняется кнопкой Run/Debug без сторонних утилит — среда сама вызывает программатор.
Пошаговая прошивка через STM32CubeProgrammer
Процесс занимает пару минут, если подключение корректно. Установите CubeProgrammer с официального сайта ST (потребуется бесплатная регистрация), подключите ST-Link к USB и плату — к программатору.
В правой части окна выберите тип подключения ST-LINK, при необходимости задайте скорость и режим (Normal, Connect Under Reset или Hot Plug), затем нажмите Connect. При успехе в логе появится идентификатор чипа и объём флеш-памяти.
☑️ Прошивка STM32 через CubeProgrammer
На вкладке 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.