Как использовать внешний ST-Link для отладки / программирования микроконтроллера STM32F103?

16

Я использую микроконтроллер STM32F103 для собственного проекта и хочу использовать ST-Link платы Nucleo STM32F411 для внешней отладки / программирования.

Я установил перемычки CN2 в положение OFF, и мой актуальный вопрос в распиновке SWO (CN2). Как я продолжаю это следующим образом:

  • PIN 1 (из SWO) - это VDD_Target
  • PIN 2 - это SWCLK
  • PIN 3 является GND
  • PIN 4 - это SWDIO
  • PIN 5 - это NRST
  • ПИН 6 SWO

Насколько мне известно, я не должен использовать все эти контакты выше. Как в, я подключен

  • PIN 2 для PIN 37 (или PA14) в MCU
  • PIN 3 к GND
  • PIN 4 - PIN 34 (или PA13)
  • PIN 5 - PIN 7 или (СБРОС) в целевом MCU.

Не уверен, стоит ли мне подключать контакт SWO, поскольку он установлен как «зарезервированный» (почему?). Также я подаю 3.3 V на вывод VIN MCU, это означает, что мне не нужно подключать VDD (PIN 1 stlink).

Пожалуйста, обратитесь к этой таблице, которую я взял из официальной таблицы:

введите описание изображения здесь введите описание изображения здесь

Вот общая конфигурация распиновки MCU здесь:

введите описание изображения здесь

Я проверил «почти» все с помощью осциллографа и тестера, и все, кажется, в порядке. Что еще мне здесь не хватает? Должен ли я что-нибудь сделать с контактами BOOT0 или BOOT1?

baqx0r
источник

Ответы:

11

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

Во-вторых, я бы порекомендовал вам открыть справочное руководство по плате STM32F411 Nucleo и взглянуть на схемы. Особенно та часть, где ST-Link подключен к контроллеру на плате.

введите описание изображения здесь

С помощью ST Microelectronics SWCLK, SWDIO, NRST и SWO (и, конечно, GND) подключены к целевому MCU. Дополнительный вывод SWO используется в целях отладки, вы можете получить доступ к распечатанным данным с помощью printfфункции через этот вывод с помощью утилиты ST-Link .

Printf через SWO Viewer отображает данные printf, отправленные с цели через SWO.

Поэтому я могу порекомендовать вам подключить SWO, это может пригодиться позже. Подключите MCU к ST-Link так же, как к нему подключен MCU Nucleo.

Что касается загрузочных конфигураций, есть три варианта выбора: проще всего придерживаться основной флэш-памяти и привязывать Boot0 к GND, но я не знаю ваших требований, поэтому выбор за вами.

введите описание изображения здесь

Бенс Кауликс
источник
3
Хотя вы можете «сойти с рук», не подключая вывод VDD, он должен быть не источником питания, а для определения напряжения источника питания цели (посмотрите, как он подключен к аналоговому входу). Более сложный интерфейс отладки мог бы поддерживать свои линии на низком уровне без этого и повышать их только до соответствующего уровня питания, поддерживая несколько целевых напряжений. Строка сброса обычно не требуется (в отличие от многих других реализаций SWD). Это ключ к восстановлению после неудачных загрузок и прошивок, которые отключают выводы SWD, но также могут быть изменены вручную.
Крис Страттон
На плате STM32F1xx основной причиной для выбора BOOT0 с возможностью выбора извне будет желание использовать заводской загрузчик ROM UART (и т. Д.). На '103 это не поддерживает USB, как это происходит во многих более поздних частях ST. Если на «103» нужен USB-загрузчик, он должен находиться в основной флэш-памяти, поэтому вывод BOOT0 для этого не нужен.
Крис Страттон
Мои boot0 и boot0 установлены на ноль, чтобы программа была записана во флэш-память. Кроме того, я попробую использовать утилиту st-link на Windows-машине. В настоящее время я использую Mac OS, но не уверен, что моя проблема связана с ОС.
baqx0r
Я использовал ST-Link STM32F407 Discovery Kit для программирования STM32F303. Я просто подключил (2-5-контактный) разъем SWD Kit к моей плате SWCLK, GND, SWDIO, NRST, SWO (как это делается на Discovery и Nucleo), и он работал с утилитой ST-Link. Вывод boot0 связан с GND через резистор 10 кОм, основываясь на справочном руководстве по аппаратному обеспечению STM32F303 .
Бенс Кауликс
6

Прежде всего, спасибо всем за их вклад.

После двух бессонных ночей и борьбы я мог выяснить проблему. Проблема заключалась в соединениях контактов на моей пользовательской плате: я думал, что в моем MCU контакт 9 (VDDA) замкнут накоротко с помощью кодов 24-36-48, а контакт 8 (VSSA) с контактами 23-35-47, но это не так.

Мне нужно дать еще один 3.3V и GND к VDDA и VSSA и ул подключаемые начали работать.

Метод решения : я использовал схемы Maple Mini для понимания соединений STM32F103. Оказалось, что они имеют короткое замыкание VDDA с VDD1, VDD2 и VDD3 и VSSA с VSS1, VSS2 и VSS3. Я думаю, я должен был понять это из именования VSSA, поскольку это не VSS0 или VSS4.

baqx0r
источник