Wie programmiere ich den STM32f411RE-Chip?

Ich habe einen Prototyp mit dem STM NUCLEO (NUCLEO-F411RE) Board entwickelt und bin jetzt, da ich mit dem Design zufrieden bin, dabei, alles zusammen auf meiner eigenen PCB zu testen. Alle anderen Komponenten, die auf meiner Platine entwickelt wurden, funktionieren hervorragend, mit Ausnahme des neuen nackten STM32F411RE (LQFP4-Paket), das ich auf der Platine integriert habe. Ich kann mich über die SWD-Schnittstelle nicht mit dem Board verbinden, um ein Programm hochzuladen, und bin jetzt nach vielen Debug-Versuchen völlig ratlos! Ich habe alle Empfehlungen zum Hardwaredesign befolgt, die in den STM32-Anwendungshinweisen ( https://www.st.com/content/ccc/resource/technical/document/application_note/76/f9/c8/10/8a/33/4b /f0/DM00115714.pdf/files/DM00115714.pdf/jcr:content/translations/de.DM00115714.pdf ).

Ich habe versucht, zwei verschiedene Programmierer zu verwenden, um mit dem Board zu kommunizieren; 1) ST-Link/V2-ISOL 2) Der ST-Link, der von der NUCLEO-Karte unterbrochen werden kann

Ich habe überprüft, ob beide Programmierer funktionieren, wenn sie an die richtigen Pins auf der Breakout-Platine NUCLEO-F4llRE angeschlossen werden, die VDD/SWCLK(PA14)/GND/SWDIO(PA13)/NRST/SWO(PB3) ist. Die Verbindungsüberprüfung erfolgt mit der STM32 ST-Link Utility Software. Die Einstellungen für das ST-Link-Dienstprogramm sind: Verbindungseinstellungen = SWD, Frequenz = 480 kHz (ich habe andere Frequenzen ausprobiert), Modus = Verbinden unter Reset und Reset-Modus ist Hardware-Reset.

Beim Versuch, eine Verbindung herzustellen, erhalte ich die Meldung "Kann keine Verbindung zum Ziel herstellen!" Fehler des ST-Link-Dienstprogramms sowie eine FAIL.txt-Datei von ST-Link V2, die „the interface firmware FAILED to reset/halt the target MCU“ enthält. Ich habe mein Oszilloskop angeschlossen, um den NRST-Pin zu analysieren, den ich mit einem 10-kOhm-Widerstand hochgezogen habe, zusammen mit einer Kappe auf Masse in der Nähe des STM32F4-Reset-Pins. Ich sehe, dass der ST-Link einen Reset-Impuls sendet, aber die MCU, aber keine Verbindung, denke ich. Ich habe dann versucht, eine Verbindung zur Platine herzustellen, indem ich NRST mit einem 10k-Pulldown-Widerstand auf niedrig gezogen habe, und immer noch keine Verbindung ... Ich habe den Durchgang zwischen den STM32f4-Pins auf der Platine und den Anschlusspins überprüft und alles ist in Bezug auf das Löten in Ordnung I erraten? Ich glaube, dass das Layout und die Platzierung des Controllers korrekt sind, da ich sowohl dem ST-Datenblatt als auch dem NUCLEO-Board-Layout gefolgt bin. Vielleicht wäre es toll, wenn das jemand bestätigen könnte! Außerdem bin ich neu in der PCB-Entwicklung mit MCUs, also könnte dies sehr gut ein dummer Fehler sein, den ich nicht sehe :)

Außerdem lasse ich mein Board von einem separaten Netzteil mit Strom versorgen, bevor ich den ST-LINK V2-Programmierer anschließe. Jede Hilfe/Empfehlung wäre sehr willkommen, da ich feststecke! Hier sind einige Fotos von meinem Setup

Schema

PCB-Layout

Leiterplatte

Überprüfen Sie die Pinbelegung, überprüfen Sie die Konnektivität zu allen Strom- und Erdungspaaren. Besorgen Sie sich eine 10x-Lupe und untersuchen Sie die Lötstellen aller Stifte auf Kurzschlüsse oder sogar fehlende Filets, die auf eine subtile Öffnung hindeuten könnten. Stellen Sie sicher, dass der Programmierer eine gemeinsame Masse hat und dass die Leitungen kurz sind. Wenn das Programmiergerät NRST vorher nicht manuell aktivieren kann, versuchen Sie auch, das Programmiergerät anzuschließen, während es im Reset gehalten wird. Stellen Sie sicher, dass die SWD-Leitungen nicht kurzgeschlossen sind.
Wie haben Sie all die GND-Pins verbunden, die getrennt erscheinen, zB C32 und IC4-Pin 47?
Die Ausrichtung der Pins vs. Pads in der oberen linken Ecke sieht verdächtig schlecht aus, und dort befinden sich tatsächlich die SWD-Signale ...
Eine Sache, die ich vergessen habe zu erwähnen, ist, dass ich zunächst einen dummen Fehler in meinem Schaltplan gemacht habe, als ich das Board erstellt und das aktualisierte Schema bereitgestellt habe. Was passiert ist, ist, dass ich versehentlich Vssa mit VDD und VDDA mit GND verbunden hatte, also habe ich die Spur von vdd zu vssa geschnitten, was Sie auf der Platine sehen. Vdda ist immer noch mit Masse verbunden, könnte dies das Problem sein?
@ChrisStratton Ich habe gerade sichergestellt, dass alle Filets gut sind und es keine Kurzschlüsse auf den SWD-Leitungen gibt, um zu versuchen, das Zurücksetzen mit angeschlossener Programmiererleitung zu halten, aber ja, die Ausrichtung ist gerade so schlecht, aber nichts Bedeutendes, alles scheint auf den Pads in Ordnung zu sein . Liegt das Problem an vdda und vssa, denken Sie, wie in meinem vorherigen Kommentar erwähnt?
@TomL. Ich habe das Rattennest nicht getroffen, als ich den Screenshot gemacht habe, aber das Board hat eine obere und eine untere GND-Ebene, in der sie verbunden sind, aber in diesen Diagrammen nicht gezeigt werden
Nach einigem Lesen fand ich heraus, dass Vdda und Vssa die Versorgungsanschlüsse für die internen RCs und PLL sind und diese Leitung sorgfältig geprüft werden muss, also ist dies höchstwahrscheinlich das Kommunikationsproblem! Eine neue Platine muss mit einer festen, schwierigen Lektion bestellt werden, wurde aber einmal faul und überprüfte das Platinen- und Schemadesign nicht doppelt, da ich vergessen hatte, die Platine vor der Bestellung zu aktualisieren ...
Sie sollten eine Antwort schreiben, in der Sie erklären, dass das Problem diese Fehlverdrahtung Ihres Boards war, sonst wird die Frage für immer ungelöst sein

Antworten (1)

Also habe ich herausgefunden, was das Problem war, ich habe einen dummen Fehler zwischen dem Schaltplan und der Leiterplatte gemacht, also stellen Sie sicher, dass Sie immer alles dreifach überprüfen, bevor Sie die Platine zur Fertigung schicken. Ich habe VDDA mit GND und VSSA mit VDD im Schaltplan falsch verbunden und es erst bemerkt, nachdem ich die Platine entworfen hatte, und ich war dumm, ich wurde abgelenkt oder was auch immer und habe die Platine nach dem Reparieren des Schaltplans nie aktualisiert ... Die VDDA- und VSSA-Verbindungen sind kritisch da es die Stromversorgung für die internen analogen Schaltungen ist, die aus der internen PLL bestehen, die den Takt für den Controller liefert (vorausgesetzt, dass keine externen Oszillatoren verwendet werden, was ich zuerst getan habe). Keine Uhr bedeutet keine Kommunikation mit der Steuerung!