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)
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:
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.
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.
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.
Toni K
Toni K
Quasilgitter
Oldtimer
Chris Stratton