Ich habe mein eigenes Board mit STM32F7-45VGT6 gebaut. Ich habe es erfolgreich mit ST-LINK v2 programmiert (allerdings nicht das Original) und jetzt kann ich mich nicht einmal mit der MCU verbinden.
Ich verwende das ST-Link-Dienstprogramm von der ST- und SWD-Schnittstelle. Es kann sein, dass ich SWD-Pins als Ausgang verwende und diese in meinem Code als GPIO-Ausgang setze. Kann es sein?
Trotzdem verbinde ich meinen Reset-Pin mit GND und setze die Option "Connect under reset" im ST-Link Utility, aber es funktioniert nicht ... Was kann ich tun?
Im Internet habe ich etwas über die Verwendung von BOOT0 Pin gefunden, aber ich weiß es nicht genau ...
Ich habe es geschafft, dieses Problem zu lösen. Falls jemand auf ein ähnliches Problem stößt, hier ist, was ich getan habe:
Ich habe ST-Link v2 und das ST-Link-Dienstprogramm verwendet. In den Einstellungen habe ich "Connect under reset" und die SWD-Schnittstelle eingestellt (bei der Frequenz bin ich mir nicht sicher).
Dann drücke ich die Reset-Taste auf meinem Board und klicke auf „Ziel“ -> „Chip löschen“ und gleich nach dem Klicken ließ ich die Taste los – der Chip wurde gelöscht, sodass ich jetzt meine MCU neu programmieren kann.
Wie auch immer, wenn Sie SWD-Pins als Ausgang verwenden müssen, fügen Sie am Anfang des Programms eine Verzögerung hinzu oder verwenden Sie einen Jumper, um die Einstellung dieser Pins als Ausgänge zu deaktivieren / aktivieren.
Damit die Verbindung unter Reset funktioniert, muss der ST-Link die Kontrolle über den Reset-Pin haben, wenn Sie ihn an Masse binden, hat der ST-Link keine Chance, das Ziel zum Laufen zu bringen und Zugriff darauf zu erhalten.
Wenn Sie den BOOT0-Pin während des Einschaltens hochziehen, startet die MCU mit dem internen Bootloader und Sie können über mehrere serielle Protokolle darauf zugreifen (weitere Einzelheiten finden Sie im Referenzhandbuch).
Innerhalb des Bootloaders sollten die SWD-Pins verfügbar sein, um Zugriff zu erhalten, aber ich bin mir nicht 100% sicher.
Der ST Flash Loader Demonstrator ist ein Tool, mit dem Sie das Mikro über die UART-Schnittstelle löschen / programmieren können. Wenn Sie auf keinen der UARTs Ihres Mikros zugreifen können, funktioniert diese Lösung nicht für Sie.
Wenn Sie stmcubemx verwenden, müssen Sie die serielle Leitung auf der Registerkarte stmcube Pinout konfigurieren. Klicken Sie auf der Registerkarte Pinbelegung auf SYS und ändern Sie die Debug-Option in Serial Wire. Es löst mein Problem und vielleicht auch dein Problem.
Ich habe einen Code auf mein eigenes STM32F427-Board heruntergeladen. Dann kann ich mit dem ST-LINK Utility keine Verbindung mehr zu meinem Board herstellen. Ich denke, mein Code bringt die Debug-Port-Pin-Konfigurationen durcheinander (? kann ich nicht bestätigen). Was ich getan habe, ist Folgendes, um die Verbindung herzustellen und mein Board neu zu programmieren:
Ich habe 2 Boards mit diesem Trick restauriert. Hoffe das hilft. --Bob
Wie Dili schon sagte:
Wenn Sie stmcubemx verwenden, müssen Sie die serielle Leitung auf der Registerkarte stmcube Pinout konfigurieren. Klicken Sie auf der Registerkarte Pinbelegung auf SYS und ändern Sie die Debug-Option in Serial Wire. Es löst mein Problem und vielleicht auch dein Problem.
STM32CubeMx konfiguriert den Debug-Port nicht standardmäßig, daher wird ST-Link nicht mehr funktionieren, sobald Sie Ihren Code flashen. Sie müssen den Chip beispielsweise mit dem ST-Link-Dienstprogramm löschen. Um eine Verbindung mit der MCU herzustellen, musste ich den BOOT0-Pin während des Einschaltens hochziehen, um den Bootloader zu aktivieren. Gehen Sie dann zum Tarjet-Menü und Chip löschen .
Beim STM32F1xx ist das gleiche Problem aufgetreten. Insbesondere konnte ich über die SWD-Schnittstelle auf meinem benutzerdefinierten Board keine Verbindung zum STM32-Chip herstellen, während auf dem STM32F7xx mit derselben Firmware auf einem NUCLEO-Board alles einwandfrei funktionierte. In meinem Fall gab es dafür 2 Gründe:
Kurzfristige Lösung: Das nRST-Signal vom Programmierer über das externe Kabel auf die Reset-Leitung gebracht (in meinem Fall war es einfach, da ich einen physischen Reset-Knopf auf meiner Platine hatte). Dann geflasht mit der FW-Version hatte SWD in der Pinbelegungsansicht angegeben. Danach musste das nRST nicht mehr angeschlossen werden.
Langfristige Lösung: In der nächsten Revision der Karte die nRST-Leitung auf die SWD-Schnittstelle verlegen. Mit dieser Änderung konnte ich SWD während des Starts sicher deaktivieren und die Pins neu verwenden
Um die MCU neu zu programmieren, halten Sie die Reset-Taste gedrückt und wählen Sie im ST-Link-Dienstprogramm „Mit Gerät verbinden“ oder drücken Sie in Ihrer IDE (z. B. Keil) auf „Download“ und lassen Sie dann die Reset-Taste los.
Die Boot-Pins (Bits in einigen Versionen) können den Start des Debuggers verhindern. Stellen Sie sicher, dass Sie das Boot-Muster beim Start nicht implementieren (bestimmtes Binärmuster auf den Pins boot0 und boot1), da Ihre MCU sonst in den Boot-Zustand gerät.
Chris Stratton