STM32 & ST-LINK - SWD-Anschluss funktioniert nicht

Ich verwende einen ST-LINK/V2-Debugger (Firmware-Version V2.J27.S6, aktuell), um mein STM32F407G-Discovery-Board zu programmieren. Bisher habe ich USB verwendet, um die MCU mit dem STM32 ST-LINK Utility v4.0.0.0 zu flashen (Treiber v4.4.0.0, st-link_cli.exe v3.0.0.0, sollten alle auf dem neuesten Stand sein -Datum). Jetzt werden wir das Discovery Board los und müssen die MCU über die SWD-Schnittstelle flashen. Ich habe jedoch ein Verhalten gefunden, das nicht mit dem ST-LINK/V2-Debugger-Handbuch ( UM1075 ) übereinstimmt.

Die Verbindung der Pins gemäß Handbuch ist

JTAG (auf ST-LINK-Debugger) - SWD (CN2 auf STM32-Karte)

  • 1 - 1 (MCU-VDD)
  • 5 - 2 (Masse)
  • 7 - 3 (SWDIO)
  • 9 - 4 (SWDCLK)

In dieser Konfiguration bekomme ich jedoch den Fehler

Verbindung zum Ziel nicht möglich!

Die Logdatei liest

ST-Link/V2-Gerät erkannt
Zielspannung erkannt: 0,722835
Fehler beim Abrufen des Ziel-IDCODE: Wenn SWD, SWD-Verbindung prüfen
Fehler (4) beim Initialisieren von ST-Link im SWD-Modus

Diesen Fehler fand ich auch in dieser Frage aber keine befriedigende Antwort. Ich denke, es bedeutet im Wesentlichen, dass es die VDD-Spannung auf der STM32-Platine nicht erkennt (obwohl es mit 3 V betrieben wird).

Ich habe es geschafft, das Problem zu lösen, indem ich die Pins auf folgende Weise direkt verbunden habe:

  • JTAG 1 - P1 VDD
  • JTAG 5 - P1 GND
  • JTAG7-P2PA13
  • JTAG 9 - P2 PA15

Und jetzt funktioniert alles einwandfrei, ich kann das Board wie früher mit USB flashen.

Ich habe hier und hier ähnliche Fragen gefunden, aber keine davon hat geholfen.

Interessanterweise hängen beide Verhaltensweisen nicht von den ST-LINK CN3-Jumperpositionen auf der STM32-Platine ab. (Warum nicht?)

Warum kann ich den SWD-Stecker nicht verwenden? Warum erkennt der ST-LINK/V2 die VDD-Spannung nicht?

Bearbeiten

Es wurde festgestellt, dass R2 nicht eingebaut ist (siehe SWD-Schema S. 27 des STM32F407G-Discovery-Board-Handbuchs ). Ich hatte vermutet, dass das Anbringen eines 100R-Widerstands das Problem lösen würde, aber es machte keinen Unterschied.

Haben Sie auch den nRST-Pin am SWD-Stecker angeschlossen? IIRC ST Link versucht standardmäßig, einen Hardware-Reset zu verwenden.
Stellen Sie außerdem sicher, dass Sie beide Jumper auf CN3 entfernen, damit der integrierte Debugger den externen nicht stört.
Hallo Tony K, danke für deinen Beitrag. Unabhängig vom Zustand des NRST-Pins oder der CN3-Jumper reproduziere ich das obige Verhalten. Ich kann problemlos eine Verbindung herstellen (nicht über den SWD-Port, sondern umgekehrt), auch wenn der NRST-Pin nicht verbunden ist (unabhängig davon, ob ich „Connect under Reset“ in der Software verwende oder nicht) und die CN3-Jumper eingeschaltet sind.
Ich hatte allgemeinen Erfolg mit den vier Verbindungen, die Sie auf verschiedenen ST- und Nicht-ST-Cortex-M-Chips verwenden, ein Zurücksetzen ist nicht erforderlich ... Ich verwende openocd, um mit dem Stlink-Debugger (Discovery/Nucleo-Board) zu kommunizieren.
STM32s erfordern keine elektrische Bestätigung von NRST, es sei denn, Sie haben eine schlechte Firmware oder eine, die die SWD-Pins deaktiviert. Dann ist es nützlich, eine Verbindung mit aktiviertem Reset herzustellen, obwohl Sie für die Software von ST das Zurücksetzen manuell aktivieren können.

Antworten (2)

Der SWD-Anschluss auf einem Discovery-Board (CN2) dient nicht zum Programmieren der On-Board-Target-MCU.

Es soll vielmehr ermöglichen, dass der integrierte ST-LINK verwendet wird, um ein externes Ziel zu programmieren.

Wenn Sie das integrierte Ziel mit einem anderen Programmiergerät programmieren möchten, müssen Sie die Schaltpläne studieren, alle relevanten Signale finden und sicherstellen, dass das integrierte Programmiergerät die Leitungen nicht lädt - was ungefähr nach Ihnen klingt beim Aufheben der SWD-Pins von ihren GPIO-Breakout-Positionen tat.

Wenn man sich die Schaltpläne ansieht, sieht es so aus, als ob bei entfernten CN3-Jumpern der Ziel- SWCLK auf CN3-2 und sein SWDIO auf CN3-4 verfügbar sein sollten. Aber die Pins 1 und 3 dieses Steckers sind nicht Strom und Masse, sondern die On-Board-Programmierer-Versionen dieser Signale, die an den Jumper-Positionen ankommen.

Danke, das ist die Art von Antwort, die ich gesucht habe! Ich war durch das ST-LINK/V2-Handbuch verwirrt, da es vorschlägt, dass ich einfach die entsprechenden JTAG-Leitungen an die SWD-Pins anschließen und sie dann als Ersatz für die USB-Verbindung verwenden kann.

BEARBEITEN

So verwenden Sie die stm32f4-Erkennung als Stlink-Debugger

Auf dem stm32f4-Discovery-Board befindet sich ein SWD-Anschluss.

Pin 1 vref (vcc), Pin 2 swdclk, Pin3 Masse, Pin 4 swdio (CN2)

und entfernen Sie die CN3-Jumper.

Um mit einem anderen SWD-Debugger auf das Ziel zuzugreifen

Entfernen Sie die CN3-Jumper und Pin 2 ist swdclk, Pin 4 ist swdio. Sie benötigen eine Erdung und im Allgemeinen eine Spannungsreferenz (damit der von Ihnen verwendete Debugger weiß, ob es sich um 1,8 V oder 3,3 V oder 5 V oder etwas anderes handelt, im Grunde um das IO des Debuggers mit Strom zu versorgen), die Sie vom Stlink-Debugger-Ende nehmen können oder das Zielende, was auch immer ein 3.xV und Boden wählen.

Oder tun Sie einfach, was Sie tun, und entfernen Sie die Jumper auf der Debugger-Seite und greifen Sie direkt auf die swd-Pins zu (PA13/15).

Alle diese Informationen sind in der ST-Dokumentation für das Board leicht verfügbar. Sie verwenden nicht unbedingt überall die SWDIO/SWDCLk-Namen.

Nein, der SWD-Stecker ist mit dem On-Board- Programmierer verbunden , nicht mit dem On-Board- Target .
Rechts das Stlink-Debug-Ende der Platine, auf der CN2 als SWD-Pin 1 markiert ist, ist vref, 2 swdclk, 3 gnd 4 swdio, nicht 2 gnd und 3 swdclk. Passen Sie diese an das Teil auf Ihrem Board an und es sollte gut funktionieren. Verwenden Sie die stm32f4 Discovery und andere Nucleo-Boards Dutzende Male mit den meisten Markenchips ...
Sie benötigen immer noch eine gemeinsame Masse und eine Spannungsreferenz, die Sie von fast überall ziehen können, cn2 oder den Hauptanschlüssen zum Chip.
Nein. Auch hier stammen die CN3-Pins 1 und 3 vom On-Board-Programmierer. Das Ziel befindet sich auf den Pins 2 und 4. Aber ja, Sie müssen den Boden (und wenn es den Programmierer interessiert) Vtarget an anderer Stelle finden.
rechts rechts habe die Jumper Pins 2 und 4 vergessen.