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

Почему ST-LINK перестал подключаться к STM32 после прошивки?

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

ST-LINK общается с STM32 через два вывода SWD: PA13 (SWDIO) и PA14 (SWCLK). Пока программа их не трогает, отладчик подключается в любой момент. Но если код сразу после старта перенастраивает эти выводы или усыпляет ядро, подключение в обычном режиме перестаёт работать — хотя микроконтроллер исправен.

ПричинаКак проявляетсяЧто сделать
Программа отключает SWD (SWJ_CFG = 100 или PA13/PA14 как GPIO)ошибка подключения, у ST-LINK/V2 оранжевый COMConnect under reset с NRST
Программа сразу уходит в Stop или Standbyсвязь пропадает после старта программыConnect under reset; в отладочной сборке — DBG_STOP
Не подключён NRSTпод сбросом подключиться нельзяпровод от вывода 15 ST-LINK к NRST
VAPP не подключён к питанию платынестабильная связьвывод 1 ST-LINK — к VDD платы
Подключение есть, но чтение и запись запрещенывключена защита от чтенияснять защиту, это стирает флеш
Всё перечисленное не помогло—BOOT0 = 1, стереть флеш, BOOT0 = 0

Подключение под сбросом

В режиме Connect under reset программатор держит NRST в нуле, подключается к ядру и только потом отпускает сброс — программа не успевает отключить SWD. В руководстве STM32CubeProgrammer этот режим так и описан: полезен, когда код отключает выводы JTAG/SWD. Без провода NRST от вывода 15 разъёма ST-LINK он не работает.

Руководство UM1075 описывает оригинальный ST-LINK/V2. У распространённых USB-«свистков» ST-LINK V2 нет входа VAPP, их выводы 3.3V и 5V — выходы питания, а вывод RST может не сбрасывать STM32. Тогда сброс делают руками: зажмите кнопку RESET на плате, запустите подключение в режиме Connect under reset и отпустите кнопку сразу после того, как программа начала подключение.

Запуск с BOOT0 = 1

По RM0008 при BOOT0 = 1 и BOOT1 = 0 STM32F103 стартует из системной памяти со встроенным загрузчиком, и ваша программа вообще не выполняется. Выводы SWD остаются в состоянии после сброса, и отладчик подключается обычным образом. Подробности о загрузчике — на странице Flash-память и загрузчик STM32.

Как подключить провода, показано на странице распиновка JTAG и SWD, сам интерфейс описан в термине «SWD», настройки подключения в среде разработки — на странице STM32CubeIDE, а о защите флеш от чтения — в термине «защита от чтения».

Похожие вопросы

Что делать, если Connect under reset не помогает?

Поставьте перемычку BOOT0 в 1 и перезапустите плату: по RM0008 STM32F103 тогда стартует из системной памяти, а не из вашей программы. Подключитесь отладчиком, сотрите флеш, верните BOOT0 в 0 и прошейте исправленную программу.

Почему отладчик теряет связь, когда программа засыпает?

В режимах пониженного потребления часть тактирования выключается. По RM0008 для отладки в Sleep и Stop отладчик должен заранее установить биты DBG_SLEEP и DBG_STOP в регистре DBGMCU_CR. Если программа засыпает сразу после старта, подключайтесь под сбросом.

Нужно ли подключать вывод 1 ST-LINK к питанию платы?

У оригинального ST-LINK/V2 с 20-контактным разъёмом — да: по руководству UM1075 вывод VAPP соединяют с питанием платы, чтобы ST-LINK согласовал уровни сигналов. У USB-«свистков» ST-LINK V2 входа VAPP нет, а выводы 3.3V и 5V у них — выходы питания: не соединяйте их с другим источником питания платы.

Источники

  1. STMicroelectronics. UM2237 Rev 29. STM32CubeProgrammer software description, ноябрь 2025 — настройки ST-LINK — режимы подключения Normal, Connect under reset (полезен, когда программа в микроконтроллере отключает выводы JTAG/SWD), Hot plug, Power down; частота SWD у ST-LINK/V2 — от 5 до 4000 кГц
  2. STMicroelectronics. UM1075 Rev 10. ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32, апрель 2024 — табл. 4 — разъём JTAG/SWD: вывод 1 VAPP подключают к VDD платы (для согласования уровней), 7 SWDIO, 9 SWCLK, 15 NRST; светодиод COM оранжевый — последний обмен с целевым микроконтроллером не удался
  3. STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — разд. 3.4, табл. 9 — BOOT1 = x, BOOT0 = 0 — запуск из основной флеш, BOOT0 = 1, BOOT1 = 0 — из системной памяти; уровни BOOT защёлкиваются на 4-м такте SYSCLK после сброса; разд. 9.3.5 и регистр AFIO_MAPR — SWJ_CFG = 100 отключает и JTAG-DP, и SW-DP; разд. 31.16.1 — для отладки в режимах Sleep и Stop отладчик должен заранее установить DBG_SLEEP и DBG_STOP в DBGMCU_CR

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