STM32 & ST-LINK - Невозможно подключиться к MCU после успешного программирования


13

Я построил свою собственную плату с STM32F7-45VGT6. Я успешно запрограммировал его с помощью ST-LINK v2 (но не оригинального) и теперь даже не могу подключиться к MCU.

Я использую ST-Link Utility из интерфейса ST и SWD. Это может быть случай, когда я использую выводы SWD в качестве вывода, и в своем коде я установил их как вывод GPIO. Может ли это быть так?

Тем не менее, я подключаю свой контакт сброса к GND и устанавливаю опцию «Подключить при сбросе» в утилите ST-Link, но она не работает ... Что я могу сделать?

В интернете я нашел кое-что об использовании BOOT0 Pin, но точно не знаю ...


«Может случиться, что я использую выводы SWD в качестве выходных данных», это возможно, но единственный, кто узнает, это вы, если только вы не имеете в виду поврежденную загрузку прошивки, которая не умышленно делает это, но может быть в результате ошибка, которая действительно случается. Как правило, это можно восстановить, выполнив начальное подключение SWD с установленным аппаратным сбросом, либо вручную, либо автоматически. Если вы хотите использовать выводы SWD в качестве задержки ввода-вывода на пару секунд, прежде чем выполнять эту настройку, вы можете упростить разработку, но понимаете, что это все равно означает, что вы не можете использовать отладчик.
— Крис Страттон

Ответы:


21

Мне удалось решить эту проблему. Если кто-нибудь сталкивается с подобной проблемой, вот что я сделал:

Я использовал ST-Link v2 и ST-Link Utility. В настройках я установил «Подключить при сбросе» и интерфейс SWD (я не уверен насчет частоты).
Затем я нажимаю кнопку сброса на моей плате и нажимаю «Target» -> «Erase chip», и сразу после нажатия я отпускаю кнопку - она ​​стерла чип, чтобы я теперь мог перепрограммировать свой MCU.


В любом случае, если вам нужно использовать выводы SWD в качестве вывода, добавьте некоторую задержку в начале программы или используйте перемычку, чтобы отключить / включить установку этих выводов в качестве выходов.


Да, этого вполне можно ожидать, если вы используете выводы SWD для других целей. Опыт показывает, что даже конструкции STM32, которые не делают этого намеренно, могут иногда «застрять» в режиме, когда контакты SWD не отвечают (повреждена программа?) И требуют такого лечения для восстановления.
— Крис Страттон

1
В Linux я использовал эту команду bash, чтобы стереть чип: st-flash
— erase

Чип Erase не работал для меня. Я пошел в Target -> Erase Sectors -> Select all -> apply. После этого я снова получил доступ к своей доске. Я не уверен, почему стирание чипа не
— andrew

6

Для того чтобы подключение было сброшено, ST-Link должен иметь контроль над выводом сброса, если вы подключите его к заземлению, ST-Link не сможет запустить цель и получить к ней доступ.


Если во время включения питания вы подняли вывод BOOT0 на высокий уровень, MCU запустится во внутренний загрузчик, и вы сможете получить доступ, используя несколько последовательных протоколов (см. Справочное руководство для получения дополнительной информации).

Внутри загрузчика должны быть доступны выводы SWD, но я не уверен на 100% в этом.

ST Flash Loader Demonstrator - это инструмент, который позволяет стирать / программировать микро, используя интерфейс UART. Если вы не можете получить доступ к любому из UART вашего микро, это решение не будет работать для вас.


Я могу получить доступ к USART3, который поддерживается загрузчиком, поэтому я попробую это позже - это будет сложно, потому что BOOT0 привязан к GND на плате ... Но я хочу знать, что не так. Что я сделал не так? Я установил выводы SWD / JTAG в качестве выходов в моей функции main (). Но в руководстве сказано, что во время сброса все контакты имеют функцию по умолчанию и могут быть использованы немедленно. Так почему я не могу стереть вспышку при перезагрузке? Я также тестировал U-LINK 2 programmer и uVision 5. Я надеюсь, что уровень защиты не был установлен - как-то случайно - установлен. Я не устанавливал такие биты, но есть ли способ проверить, в порядке ли защитные биты?
— zupazt3

@ zupazt3 Я не хочу показаться грубым, но, пожалуйста, перечитайте мое первое предложение. Содержит ответ на проблему с переустановленным соединением. Если вы этого не понимаете, оставьте более конкретный комментарий.
— Арсенал

Но я не связываю это все время :) В моем первом посте я имел в виду, что Я ДАЖЕ связал это непосредственно с GND, чтобы проверить, поможет ли это. Но обычно я не привязываю NRST к GND, а к программисту, поэтому он контролирует сброс. И это все еще не соединится. Я также пытался использовать U-Link 2 и Keil uVision 5, но с тем же результатом. В чем может быть причина?
— zupazt3

@ zupazt3, что не совсем понятно из твоего вопроса. Возможно, может помочь увеличение часов SWD, поскольку оно может получить соединение до того, как цель переключится на выход. Но я случайно установил выводы SWD на выход и не смог подключиться к моей цели, и только с помощью BOOT0 я смог восстановить его, если вы привязали их к заземлению напрямую (без резистора), это будет жесткий.
— Арсенал

1
Мне наконец удалось стереть чип! С помощью ST-Link Utility - я нажал кнопку сброса, нажал кнопку «полное стирание» и отпустил кнопку, она как-то стерлась сама и теперь работает. Я пробовал это раньше, но только сейчас это сработало.
— zupazt3

3

если вы используете stmcubemx, вам нужно настроить последовательный провод на вкладке распиновки stmcube. на вкладке распиновки нажмите SYS и измените параметр отладки на последовательный провод. это решит мою проблему, и, возможно, вашу проблему тоже.


Хотя это может быть проблемой, если оставление выводов SWD в режиме включения по умолчанию в режиме SWD не является настройкой по умолчанию для этого программного пакета, это, возможно, довольно серьезный дефект юзабилити, который требует сообщения об ошибке и исправления. Вы уверены, что не изменили настройки по сравнению с их первоначальными значениями или не начали с конкретного проекта, который требовал использования этих контактов не по умолчанию?
— Крис Страттон

Во-первых, я просто установил мои контакты как SYS_SW .... но они окрашены в оранжевый цвет. Также была проблема с подключением к чипу после загрузки кода. Когда я выбрал режим отладки в SYS-Serial Wire, микросхема подключается нормально после прошивки.
— ГТУ

1

Я загрузил некоторый код на свою собственную плату STM32F427. Тогда я больше не могу подключиться к своей плате с помощью утилиты ST-LINK. Я думаю, что мой код испортил конфигурации контактов порта отладки (? Не могу подтвердить). Я сделал следующее, чтобы установить соединение и перепрограммировать мою плату:

  1. Откройте утилиту ST-LINK и приготовьтесь «Подключиться» в меню «Цель».
  2. Подайте питание на вашу плату (в моем случае я использую USB-кабель) и В ТО ЖЕ ВРЕМЯ нажмите кнопку «Подключиться» в утилите ST-LINK.

Я восстановил 2 доски с помощью этого трюка. Надеюсь это поможет. --Bob


1

Как Дили сказал:

если вы используете stmcubemx, вам нужно настроить последовательный провод на вкладке распиновки stmcube. на вкладке распиновки нажмите SYS и измените параметр отладки на последовательный провод. это решит мою проблему, и, возможно, вашу проблему тоже.

STM32CubeMx не настраивает порт отладки по умолчанию, следовательно, ST-Link перестанет работать, как только вы загрузите свой код. Вы должны стереть чип с помощью ST-Link Utility, например. Чтобы подключиться к MCU, мне пришлось во время включения питания сильно тянуть контакт BOOT0, чтобы активировать загрузчик. Затем перейдите в меню Tarjet и стереть чип .


0

Чтобы перепрограммировать MCU, удерживайте кнопку сброса и выберите «Подключиться к устройству» в ST-Link Utility или нажмите «загрузить» в вашей IDE (например, Keil), а затем отпустите кнопку сброса.


-1

Загрузочные контакты (биты в некоторых версиях) могут препятствовать запуску отладчика. Убедитесь, что вы не внедрили загрузочный шаблон при запуске (определенный двоичный шаблон на контактах boot0 и boot1), иначе ваш MCU перейдет в состояние загрузки.


Я привязал контакт boot0 к GND ... Я не уверен в том, что вы написали, потому что - как я уже сказал - мне удалось успешно запрограммировать мою флэш-память, и программа все еще выполняется сама на MCU - я просто не могу подключиться к MCU с ST -Ссылка через интерфейс SWD. При сбросе он не должен выполнять загрузку, а контакты должны быть в состоянии по умолчанию, поэтому я не понимаю, почему он не подключается.
— zupazt3

Вы уверены, что? Как вы думаете, какая комбинация отключит SWD таким образом, что манипулирование сбросом не может переопределить?
— Крис Страттон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.