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

ST-Link

ST-Link - это программатор и отладчик для микроконтроллеров STM32.

В контексте простых устройств он нужен, чтобы:

  • прошить STM32-плату;
  • восстановить плату после неудачной прошивки;
  • подключиться к чипу через SWD;
  • стереть память;
  • проверить, виден ли микроконтроллер;
  • иногда отлаживать программу.

ST-Link не нужен для всех плат. ESP32, RP2040 и Arduino обычно прошиваются другими способами.

Что такое SWD

SWD - это Serial Wire Debug.

Это интерфейс отладки и прошивки ARM-микроконтроллеров, который часто используют у STM32.

Для базового подключения обычно нужны:

  • SWDIO;
  • SWCLK;
  • GND;
  • иногда NRST;
  • иногда 3.3V или VTref как опорное напряжение цели.

Важно: 3.3V на ST-Link не всегда означает "питать плату отсюда". Часто ST-Link должен видеть напряжение целевой платы, чтобы понимать уровни сигналов.

Минимальное подключение

Обычно подключают:

ST-Link SWDIO -> плата SWDIO
ST-Link SWCLK -> плата SWCLK
ST-Link GND   -> плата GND
ST-Link NRST  -> плата NRST, если нужен reset
ST-Link 3.3V/VTref -> 3.3V цели, если это требуется конкретным ST-Link

Плата STM32 при этом часто питается от своего штатного питания или USB.

Перед подключением проверь документацию конкретного ST-Link и платы.

Платы Nucleo для STM32 со встроенным ST-Link отладчиком

Источник: Wikimedia Commons, Avandalen, CC BY-SA 4.0

Питание платы

Самая частая путаница: питается ли плата от ST-Link или отдельно.

Варианты:

  1. Плата питается отдельно, ST-Link только подключается к SWD и GND.
  2. ST-Link даёт 3.3V на маленькую целевую плату, если он действительно рассчитан на это.
  3. ST-Link только считывает VTref, но не должен питать плату.

Нельзя бездумно соединять несколько источников питания.

Если плата уже питается от USB или блока питания, не подключай питание от ST-Link, пока не уверен, что это разрешено схемой.

DFU - это режим прошивки через USB-загрузчик, если он есть и доступен.

ST-Link работает через SWD напрямую с микроконтроллером.

ST-Link полезен, когда:

  • DFU не доступен;
  • bootloader повреждён или не используется;
  • прошивка отключила USB;
  • плата не выходит в обычный режим прошивки;
  • нужно стереть память;
  • нужно восстановить доступ к STM32.

Но если плата нормально прошивается через USB/DFU или SD-карту, ST-Link может быть не нужен.

Connect under reset

Иногда прошивка ломает доступ к SWD.

Например:

  • использованы пины SWD как обычные GPIO;
  • прошивка быстро уводит чип в сон;
  • код зависает сразу после старта;
  • настроены неправильные clock/power режимы.

В таких случаях помогает режим Connect under reset.

Смысл: ST-Link удерживает reset и пытается подключиться до того, как плохая прошивка начнёт выполняться.

Для этого часто нужно подключить NRST.

В STM32CubeProgrammer или другой утилите обычно видно:

  • подключён ли ST-Link;
  • найден ли target;
  • какой чип обнаружен;
  • можно ли прочитать память;
  • можно ли стереть flash.

Если ST-Link виден как USB-устройство, но target не найден, проблема часто в подключении к плате:

  • нет питания целевой платы;
  • нет общего GND;
  • перепутаны SWDIO и SWCLK;
  • не подключён VTref, если он нужен;
  • слишком высокая частота SWD;
  • чип залочен;
  • прошивка мешает подключению;
  • нужен Connect under reset.

Частота SWD

Если связь нестабильна, попробуй уменьшить частоту SWD.

На длинных проводах, плохих Dupont-перемычках или нестабильной плате высокая частота может мешать подключению.

Для восстановления платы лучше медленнее и надёжнее, чем быстрее.

Типовые ошибки

  • забыли GND;
  • перепутали SWDIO и SWCLK;
  • подключили питание от ST-Link и USB одновременно без понимания схемы;
  • не подали питание на целевую плату;
  • не подключили NRST, когда нужен Connect under reset;
  • выбрали слишком высокую частоту SWD;
  • пытаются ST-Link прошить ESP32 или RP2040;
  • пытаются подключиться к залоченному чипу без понимания readout protection;
  • используют длинные плохие провода;
  • не обновили firmware ST-Link или не установили драйвер.

Что нельзя делать

Нельзя:

  • подавать 5V на 3.3V STM32-плату без проверки;
  • соединять несколько источников питания наугад;
  • подключать ST-Link к плате под сетевым напряжением без безопасной изоляции и корпуса;
  • менять SWD-провода при включённом питании, если есть риск короткого;
  • считать, что клон ST-Link имеет такую же распиновку, как оригинал.

У клонов ST-Link распиновка может отличаться. Всегда смотри маркировку именно своего адаптера.

Главное

  • ST-Link нужен для STM32 через SWD.
  • Минимум: SWDIO, SWCLK, GND, иногда NRST и VTref.
  • Плата должна быть правильно запитана, но не обязательно от ST-Link.
  • DFU и ST-Link - разные способы прошивки.
  • Connect under reset помогает восстановить доступ после плохой прошивки.
  • Если target не найден, сначала проверяй питание, GND, SWDIO/SWCLK, NRST и частоту SWD.

Материалы по теме