Ein benutzerdefiniertes STM32-Board kann nicht programmiert werden

Ich habe ein einfaches STM32-Board entworfen. Unten sind die schematischen und PCB-Layout-Bilder:

Schema:
Geben Sie hier die Bildbeschreibung ein

PCB-Layout:Geben Sie hier die Bildbeschreibung ein

PCB-Layout mit hervorgehobenem VDD:Geben Sie hier die Bildbeschreibung ein

PCB-Layout mit hervorgehobenem GND:Geben Sie hier die Bildbeschreibung ein

In den obigen Bildern sind nur die Teile dieses Designs dargestellt, die für meine Frage relevant sind.

Mein Problem ist: Ich habe versucht, den eingebauten ST-Link eines STM32 Discovery Boards zu verwenden, um dieses benutzerdefinierte Board zu programmieren, aber es ist mir noch nicht gelungen. Die ST-Link Utility-Anwendung auf dem PC kann den Programmierer erkennen, aber sie kann die Ziel-MCU nicht erkennen. Die Fehlermeldungen, die ich erhielt, waren: "Ziel nicht verbunden" und "ST-Link USB-Kommunikationsfehler".

Hier sind einige verwandte Fakten zu meinem Problem:

  • Das STM32 Discovery Board funktioniert einwandfrei: Ich kann den integrierten ST-Link verwenden, um die integrierte STM32-MCU zu programmieren. Das ist in Ordnung.
  • Die STM32-MCU wurde mit der richtigen Ausrichtung auf die benutzerdefinierte Platine gelötet. Ich habe dies zweimal überprüft.
  • Ich habe VDD- und SWD-Traces überprüft. Sie sind gut verbunden (kein Lötproblem). Pin Boot0 liegt auf 0V. Pin NRST liegt bei 3,3 V.
  • Das SWD-Kabel ist kurz, nur 7-8 cm lang.
  • Der STM32 auf meinem benutzerdefinierten Board ist vom gleichen Typ wie der auf dem Discovery Board.
  • Ich habe die Anweisungen im Handbuch des STM32 Discovery Board zur Verwendung des Discovery Board zum Programmieren einer externen STM32 MCU befolgt. Um genauer zu sein, habe ich die 2 CN3-Jumper entfernt und dann die Platinen wie in dieser Tabelle verbunden:Geben Sie hier die Bildbeschreibung ein

  • Ich habe auch die Lötbrücke SB11 auf dem Discovery Board entfernt (damit Pin NRST richtig funktionieren kann).

  • Ich habe sowohl die ST-Link Utility App als auch Keil ausprobiert. Die Fehlermeldungen die ich bekomme sind die gleichen.
  • Zuerst habe ich Pin 6 auf der obigen Tabelle (SWO) nicht angeschlossen, weil es meines Wissens nicht notwendig ist. Danach habe ich es aber auch angeschlossen, aber es hat immer noch nicht geklappt.
  • Ich habe auch eine 100-nF-Kappe von Pin NRST zu GND und dann einen 100-k-Pull-up-Widerstand von diesem Pin zu VDD hinzugefügt. Das Problem bleibt bestehen.
  • Ich habe auch versucht, den Modus "Verbinden unter Zurücksetzen" des ST-Link-Dienstprogrammprogramms zu verwenden. Auch kein Glück.

Ich vermute, dass mit dem Design etwas nicht stimmt, bin mir aber nicht sicher. Bitte helfen Sie mir, das Problem zu lösen.

Danke sehr :)

Soweit ich mich erinnere, müssen Sie sowohl den ST-Link als auch Ihr benutzerdefiniertes Board mit Strom versorgen. Die 3,3 V im SWD-Anschluss Ihres benutzerdefinierten Boards müssen die 3,3 V liefern, damit der st-Link erkennen kann.
@davidrojas: Danke für deine Antwort. Nun, derzeit versorge ich den ST-Link über den USB-Anschluss meines PCs mit Strom. Das kundenspezifische STM32-Board wird von einer externen, separaten 3,3-V-Spannung versorgt. Die Masse dieser 2 Platinen ist jedoch bereits verbunden (wie in der obigen Tabelle). Außerdem sind die 3,3 V von meinem benutzerdefinierten Board auch auf dem ST-Link mit VDD_TARGET verbunden. Glaubst du, das ist genug?
Es sollte reichen, ja. Ein weiteres Problem könnte die Länge und das Layout der Leitungen SWDIO und SWCLK sein. Aus diesem Grund hatte ich in der Vergangenheit Probleme mit intermittierenden Verbindungen. Sie müssen so kurz wie möglich sein. Versuchen Sie auch, die Geschwindigkeit des SWD zu verringern.
Ich habe die SWD-Geschwindigkeit von den standardmäßigen 1,8 MHz auf unter 400 kHz gesenkt, aber immer noch keinen Erfolg. Was die Kabellänge betrifft, so beträgt die Gesamtlänge der SWD-Verbindung (von ST-Link zum Ziel-STM32) in meinem Setup etwa 12-13 cm. Ist das noch im Rahmen?
Ich habe sie meistens etwas kürzer. Können Sie ein Bild des Layouts vom swd-Anschluss zu den Pins der MCU posten und diese Linien hervorheben, um zu sehen, ob wir etwas Seltsames erkennen können?
Hier sind die Bilder, bitte werfen Sie einen Blick darauf: Das ist SWDIO . Das ist SWCLK . Und das ist NRST .
Ich fürchte, ich sehe nichts Seltsames, die Verbindungen sehen für mich in Ordnung aus.
Nun, ich habe mich deswegen auch 2 Tage lang am Kopf gekratzt und konnte immer noch keine Antwort finden. Vielen Dank trotzdem für Ihre Kommentare.
Ich hatte Probleme bei der Verwendung des Discovery-Boards st-link zum Programmieren anderer Boards. Am merkwürdigsten ist, dass mit einem Nucleo-Board alles funktioniert. Es kann mit den St-Link-Versionen beider Boards zusammenhängen. Nur meine Erfahrung.
Haben Sie bemerkt, dass die Erdung unter dem Chip physisch isoliert und nicht wirklich mit einem der Erdungsstifte verbunden ist? Die tatsächlichen Verbindungen zwischen den Erdungsstiften folgen gewundenen Pfaden außerhalb des Chips, und einige von ihnen könnten tatsächlich isoliert sein. Sie müssen Ihre Abstände so anpassen, dass der Erdungsguss keine isolierten Inseln hat, und dies hilft sicherzustellen, dass alle Erdungsstifte des Chips viel näher am gleichen Potenzial liegen.
Ergänzend zu dem, was @DaveTweed gesagt hat; Es sieht so aus, als würden Sie Altium verwenden, richtig? Wenn dies der Fall ist, können Sie in die Einstellungen für Ihre Ebenen gehen und auswählen, Kupferinseln zu entfernen, und auch die Splitterbreite (die breiter als die Herstellermöglichkeiten bleibt) und den Isolationsabstand von Leiterbahn zu Guss ändern.

Antworten (1)

Vielen Dank für Ihre tollen Kommentare. Aufgrund dieser bin ich mir sicher, dass mein Design fehlerfrei ist. Deshalb konzentrierte ich mich auf die Suche nach Fehlern in der Hardware. Und ich habe den Fehler gefunden! Das ist ein Lötfehler.

Ich habe diesen Fehler gefunden, nachdem ich diese Anweisung befolgt habe: „Verwenden Sie ein Multimeter und testen Sie alle Verbindungen auf Kurzschlüsse oder fehlende Verbindung " die Verbindung vorübergehend (z. B. Sie schieben den Pin von IC auf die Leiterbahn auf der Platine und der Test ist in Ordnung, aber sobald Sie loslassen, biegt sich der Pin wieder nach oben)." Den Originalpost gibt es hier .