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


13

Я створив власну плату з STM32F7-45VGT6. Я успішно запрограмував його за допомогою ST-LINK v2 (але не оригінальний), і тепер я навіть не можу з'єднатися з MCU.

Я використовую утиліту ST-Link із інтерфейсу ST та SWD. Можливо, я використовую шпильки SWD як вихід, і в коді я встановлюю їх як вихід GPIO. Чи може це бути?

Тим не менш, я підключаю свій штифт для скидання до GND і встановлюю опцію "Підключитися під час скидання" в утиліті ST-Link, але вона не працює ... Що я можу зробити?

В Інтернеті я знайшов щось про використання BOOT0 Pin, але точно не знаю ...


"Можливо, я використовую шпильки SWD як вихід", але це можливо, але єдиний, хто знав би це ви, якщо ви не маєте на увазі пошкоджене завантаження мікропрограмного забезпечення, яке не робить цього навмисно, але може бути наслідком помилка, яка насправді трапляється. Як правило, це можна відновити, виконавши початкове з'єднання SWD із встановленим скиданням обладнання, вручну або автоматично. Якщо ви хочете використовувати шпильки SWD, оскільки затримка вводу-виводу затримується на пару секунд, перш ніж зробити це налаштування може полегшити розробку, але зрозуміти, що це все ще означає, що ви не можете використовувати налагоджувач.
Кріс Страттон

Відповіді:


21

Мені вдалося вирішити цю проблему. Якщо хтось стикається з подібною проблемою, ось що я зробив:

Я використовував утиліту ST-Link v2 та ST-Link. В налаштуваннях я встановив "Підключитися під час скидання" та інтерфейс SWD (я не впевнений у частоті).
Потім я натискаю кнопку скидання на моїй дошці і натискаю "Ціль" -> "Стерти чіп", і відразу після натискання я відпустив кнопку - Це стерло чіп, і тепер я можу перепрограмувати мій MCU.


У будь-якому випадку, якщо вам потрібно використовувати шпильки SWD як вихід, то додайте деяку затримку на початку програми або скористайтеся перемичкою, щоб відключити / включити встановлення цих штифтів як вихід.


Так, цього можна очікувати, якщо використовувати шпильки SWD з іншою метою. Досвід показує, що навіть проекти STM32, які навмисно цього не роблять, можуть періодично «застрягати» в режимі, коли шпильки SWD не реагують (пошкоджена програма?) І потребують такого лікування для відновлення.
Кріс Страттон

1
У Linux я використовував цю команду bash, щоб стерти чіп: st-flash erase
nathan

Мікросхема Erase не працювала для мене. Я перейшов до Цільової -> Стерти сектори -> Вибрати все -> застосувати. Після цього я відновив доступ до своєї ради. Я не впевнений, чому стерти мікросхему не
andrew

6

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


Якщо підняти штифт BOOT0 високо під час увімкнення живлення, MCU запуститься у внутрішній завантажувач і ви зможете отримати доступ за допомогою декількох послідовних протоколів (докладнішу інформацію див. У посібнику з посилання).

Всередині завантажувача SWD-штифти повинні бути доступними, щоб отримати доступ, але я не впевнений у цьому на 100%.

Демонстратор завантажувача ST Flash - це інструмент, який дозволяє стерти / програмувати мікрофон за допомогою інтерфейсу UART. Якщо ви не можете отримати доступ до будь-якого з UART мікрофонів, це рішення не працюватиме для вас.


Я можу отримати доступ до USART3, який підтримується завантажувачем, тому я спробую це пізніше - це буде хитро, тому що BOOT0 прив’язаний до GND на друкованій платі ... Але я хочу знати, що не так. Що я зробив не так? Я встановлюю шпильки SWD / JTAG в якості вихідних даних у своїй головній () функції. Але в інструкції сказано, що під час скидання всі штифти мають свою функцію за замовчуванням і їх можна використовувати негайно. То чому я не можу стерти спалах під час скидання? Я також протестував програміст U-LINK 2 та uVision 5. Сподіваюся, що рівень захисту - якось випадково - не встановлений. Я не встановлював жодних таких бітів, але чи є спосіб перевірити, чи захисні біти в порядку?
zupazt3

@ zupazt3 Я не хочу звучати грубо, але, будь ласка, перечитайте моє перше речення. Він містить відповідь на проблему з підключенням під час скидання. Якщо ви цього не розумієте, опублікуйте більш конкретний коментар.
Арсенал

Але я це не пов'язую весь час :) У своєму першому дописі я мав на увазі, що я навіть прив’язав його безпосередньо до GND, щоб перевірити, чи це допоможе. Але зазвичай я не прив’язую NRST до GND, а до програміста, тому він має контроль над перезавантаженням. І це все одно не підключиться. Я також намагався використовувати U-Link 2 і Keil uVision 5, але з тим же результатом. Що може бути причиною?
zupazt3

@ zupazt3, що було не зовсім зрозуміло з вашого запитання. Можливо, збільшення годинника SWD може допомогти, оскільки воно може отримати з'єднання до виходу цілі на вихід. Але я випадково встановив SWD-штифти на вихід і не зміг встановити з'єднання з моєю ціллю, і лише використовуючи BOOT0, я зміг відновити його, якщо ви прив'язали їх до землі безпосередньо (без резистора), це буде жорсткий.
Арсенал

1
Нарешті вдалося стерти чіп! За допомогою утиліти ST-Link - я натиснув кнопку скидання, натиснув "повне стирання" та кнопку випуску, і вона якось стерлася і тепер вона працює. Я пробував це раніше, але тільки зараз це спрацювало.
zupazt3

3

якщо ви використовуєте stmcubemx, вам потрібно налаштувати послідовний провід на вкладці pinmbe stmcube. на вкладці pinout натисніть SYS та змініть параметр налагодження на послідовний провід. це виправить мою проблему, а може бути і вашу проблему.


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

Я спочатку просто встановив свої шпильки як SYS_SW .... але вони пофарбовані в помаранчевий. Також виникла проблема з підключенням до чіпа після завантаження коду. Коли я вибрав режим налагодження в SYS-послідовному проводі, чіп підключається нормально після миготіння.
gtu

1

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

  1. Відкрийте утиліту ST-LINK і будьте готові до "Підключення" в меню "Ціль".
  2. Підключіть дошку (в моєму випадку я використовую USB-кабель) і ОДНОГО ЧАСУ натисніть «Підключити» від утиліти ST-LINK.

Я відновив 2 дошки цим фокусом. Сподіваюсь, це допомагає. - Боб


1

Як сказала Ділі:

якщо ви використовуєте stmcubemx, вам потрібно налаштувати послідовний провід на вкладці pinmbe stmcube. на вкладці pinout натисніть SYS та змініть параметр налагодження на послідовний провід. це виправить мою проблему, а може бути і вашу проблему.

STM32CubeMx не налаштовує порт налагодження за замовчуванням, отже, ST-Link перестане працювати, коли ви спалахнете код. Наприклад, слід стерти мікросхему за допомогою утиліти ST-link. Для підключення до MCU я повинен був підняти штифт BOOT0 під час живлення, щоб активувати завантажувач. Потім перейдіть до меню Tarjet і видаліть чіп .


0

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


-1

Штифти для завантаження (біти в деяких версіях) можуть запобігти запуску налагоджувача. Переконайтеся, що ви не реалізуєте шаблон завантаження при запуску (певний двійковий візерунок на boot0 та boot1 штирях), інакше ваш MCU перейде у стан завантаження.


У мене на GND прив’язаний штифт boot0 ... Я не впевнений у тому, що ви написали, тому що - як я вже сказав - мені вдалося успішно програмувати свій спалах, і програма все ще виконує себе на MCU - я просто не можу підключитися до MCU зі ST -Посилання SWD-інтерфейсу. Під час скидання він не повинен виконувати завантаження, а штифти повинні знаходитись у стані за замовчуванням, тому я не розумію, чому він не підключається.
зупазт3

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