Wie verwende ich einen externen ST-Link zum Debuggen/Programmieren der STM32F103-MCU?

Ich verwende die STM32F103-MCU für mein eigenes Projekt und möchte den ST-Link der STM32F411-Nucleo-Karte für externe Debugging-/Programmierzwecke verwenden.

Ich habe die CN2-Jumper auf OFF gesetzt und meine eigentliche Frage betrifft die Pinbelegung von SWO (CN2). Wie ich dabei vorgehe ist wie folgt:

  • PIN 1 (von SWO) ist VDD_Target
  • PIN 2 ist SWCLK
  • PIN 3 ist GND
  • PIN 4 ist SWDIO
  • PIN 5 ist NRST
  • PIN 6 ist SWO

Nach meinem besten Wissen sollte ich nicht alle diese Pins oben verwenden. Wie in, ich habe mich verbunden

  • PIN 2 bis PIN 37 (oder PA14) in der MCU
  • PIN 3 auf GND
  • PIN 4 bis PIN 34 (oder PA13)
  • PIN 5 bis PIN 7 oder (RESET) in der Ziel-MCU.

Ich bin mir nicht sicher, ob ich den SWO-Pin anschließen soll, da er als "reserviert" festgelegt ist (warum?). Außerdem gebe ich 3,3 V an den VIN-Pin der MCU, was bedeutet, dass ich VDD (PIN 1 von stlink) nicht anschließen muss.

Bitte beziehen Sie sich auf diese Tabelle, die ich dem offiziellen Datenblatt entnommen habe:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Hier ist die allgemeine Pinbelegungskonfiguration der MCU hier:

Geben Sie hier die Bildbeschreibung ein

Ich habe "fast" alles mit Oszilloskop und Tester getestet und alles scheint in Ordnung zu sein. Was fehlt mir hier noch? Sollte ich etwas mit BOOT0- oder BOOT1-Pins machen?

Antworten (2)

Zunächst einmal haben Sie Recht, wenn Ihr Board bereits eine Versorgungsspannungsquelle hat, müssen Sie den VDD-Pin von ST-Link nicht anschließen.

Das zweite, was ich Ihnen empfehlen würde, ist, das Referenzhandbuch des STM32F411 Nucleo-Boards zu öffnen und sich die Schaltpläne anzusehen. Besonders der Teil, wo der ST-Link mit dem Controller auf der Platine verbunden ist.

Geben Sie hier die Bildbeschreibung ein

Von ST Microelectronics werden SWCLK, SWDIO, NRST und SWO (und natürlich GND) mit der Ziel-MCU verbunden. Der zusätzliche SWO-Pin wird für Debug-Zwecke verwendet, Sie können mit der printfFunktion über diesen Pin mit dem ST-Link-Dienstprogramm auf gedruckte Daten zugreifen .

Der Printf via SWO Viewer zeigt die vom Ziel durch SWO gesendeten printf-Daten an.

Ich kann Ihnen also empfehlen, auch SWO anzuschließen, kann später nützlich sein. Verbinden Sie Ihre MCU mit ST-Link, genau wie sie die MCU des Nucleo damit verbunden haben.

Bei den Boot-Konfigurationen gibt es drei wählbare Optionen. Am einfachsten ist es, beim Haupt-Flash zu bleiben und Boot0 an GND zu binden, aber ich kenne Ihre Anforderungen nicht, also liegt es an Ihnen zu wählen.

Geben Sie hier die Bildbeschreibung ein

Sie können zwar "damit davonkommen", den VDD-Pin nicht anzuschließen, aber es ist keine Versorgung da, sondern um die Versorgungsspannung des Ziels zu erkennen (siehe Anschluss an einen analogen Eingang). Eine ausgeklügeltere Debug-Schnittstelle könnte ihre Leitungen ohne dies niedrig halten und sie nur auf den entsprechenden Versorgungspegel anheben, wodurch mehrere Zielspannungen unterstützt werden. Die Reset-Leitung wird normalerweise nicht benötigt (anders als bei vielen anderen SWD-Implementierungen). Es ist der Schlüssel zur Wiederherstellung nach schlechten Lasten und Firmwares, die die SWD-Pins deaktivieren, aber auch manuell manipuliert werden können.
Auf einem STM32F1xx-Board wäre der Hauptgrund, BOOT0 extern wählbar zu machen, der Wunsch, den werkseitigen ROM-UART-Bootloader (usw.) zu verwenden. Beim '103 wird USB nicht unterstützt, wie dies bei vielen späteren Teilen von ST der Fall ist. Wenn man einen USB-Bootloader auf dem '103 haben möchte, muss er sich im Haupt-Flash-Speicher befinden, daher ist der BOOT0-Pin dafür nicht nützlich.
Mein boot0 und boot0 wird auf Null gesetzt, um sicherzustellen, dass das Programm in den Flash-Speicher geschrieben wird. Abgesehen davon werde ich versuchen, das Dienstprogramm st-link auf einem Windows-Computer zu verwenden. Ich verwende derzeit Mac OS, bin mir aber nicht sicher, ob mein Problem mit dem Betriebssystem zusammenhängt.
Ich habe den ST-Link eines STM32F407 Discovery Kits verwendet, um einen STM32F303 zu programmieren. Ich habe einfach den SWD-Anschluss des (2-5-poligen) Kits an mein Board SWCLK, GND, SWDIO, NRST, SWO angeschlossen (genau wie bei Discovery und Nucleo) und es funktionierte mit dem ST-Link-Dienstprogramm. Der Boot0-Pin ist über einen 10k-Widerstand mit GND verbunden, basierend auf dem STM32F303- Hardware-Referenzhandbuch .

Erstmal danke an alle für ihren Beitrag.

Nach zwei schlaflosen Nächten und Kampf konnte ich das Problem herausfinden. Das Problem lag in den Pin-Verbindungen in meinem benutzerdefinierten Board: Ich dachte, dass in meiner MCU Pin 9 (VDDA) mit den PINs 24-36-48 und Pin 8 (VSSA) mit den PINs 23-35-47 kurzgeschlossen ist. aber es ist nicht so.

Ich musste VDDA und VSSA weitere 3,3 V und GND geben , und st-link begann zu arbeiten.

Lösungsmethode: Ich habe Maple Mini-Schaltpläne verwendet, um die Verbindungen von STM32F103 zu verstehen. Es stellte sich heraus, dass sie VDDA mit VDD1, VDD2 & VDD3 und VSSA mit VSS1, VSS2 und VSS3 kurzgeschlossen haben. Ich denke, ich hätte dies aus der Benennung von VSSA verstehen sollen, da es nicht VSS0 oder VSS4 ist.

Sie müssen immer VDDA- und VSSA-Pins an jedem STM32 anschließen. Wenn Sie die analogen Teile (ADC, DAC usw.) nicht verwenden oder sich nicht um das Rauschen kümmern, können Sie sie einfach an VDD und VSS binden. Manchmal hat man keine Wahl (z. B. Bluepills), da der Boarddesigner sie bereits gebunden hat. Wenn ich Analog verwende, füttere ich VDDA über einen Filter (Kappen und einen FB).