Programmieren Sie die STM32-MCU standardmäßig mit SWD als alternative Funktion

Ich möchte meine erste STM32-MCU im Projekt verwenden. Das Projekt umfasst einige Peripheriegeräte (UART/SPI/I2C) und hat hier und da ein bisschen Mathematik zu tun, hauptsächlich Bitverschiebung und/oder ganzzahlige Berechnungen, also fand ich mir eine MCU mit den Peripheriegeräten, die ich brauche, interner Oszillator, genug Flash-Programmplatz und RAM für meine Anwendung.

Also habe ich diesen Smol Boi gefunden: STM32L051K8T6 in LQFP-32, Datenblatt

Ich habe das Datenblatt durchgesehen, alles scheint klar zu sein, ich habe kein Problem damit, neue Sachen zu finden, IDE und alles, aber ich habe ein paar Fragen, auf die ich keine klare Antwort finden konnte, und die Community kann hilfreicher sein Trotzdem:

  1. Ich würde es gerne über SWD programmieren können. Es ist eine 2-Draht-Kommunikation, richtig? SWDIO und SWCLK. Theoretisch brauche ich also, vorausgesetzt, ich versorge die MCU mit Strom, nur 2 Pins, um mich an die MCU anzuschließen (oder vielleicht auch zurückzusetzen? Masse verbunden, offensichtlich). Ich meine, ich brauche keinen großen 10-poligen Stecker oder so? Ziemlich ähnlich wie Atmegas über UART (die einen RX-, TX- und DTR-Impuls zum MCU-Reset benötigen). Das Googeln der ST-Link v2-Pinbelegung zeigte mir nur diese beiden und einen mir unbekannten "SWIM" -Pin. (was im Datenblatt nie erwähnt wird; ich habe tatsächlich ein ST-Link v2 und sogar ein Nucleo-Board mit integriertem Programmierer, aber auch hier schadet es nie, kluge Leute zu fragen).

  2. SWDIO und SWCLK sind als „alternative Funktionen“ der Pins gekennzeichnet. Ich gehe also davon aus, dass ich es nicht standardmäßig über SWDIO/SWCLK programmieren kann, da die Pins standardmäßig nicht als SWDIO/SWCLK konfiguriert sind. Ist es etwas, wofür ich BOOT0 verwenden muss? Aktiviert der Bootloader aus dem internen Speicher SWD-Pins für mich, um den Flash zu programmieren? In diesem speziellen Fall gibt es auch keinen BOOT1-Pin (Strg + F "Boot1" ergibt keine nützlichen Erwähnungen im gesamten Datenblatt).

  3. Ich möchte vom Benutzer aktualisierbare Software haben. Über USB. Mit ATMega ist das ganz einfach, ich habe gerade einen USB-UART CP2102N eingebaut, und es funktioniert wie ein Zauber, kann Software den ganzen Tag aktualisieren. Ich denke, ich könnte meinen eigenen UART-Bootloader für STM32 schreiben, es ist nur eine Frage der Entschlossenheit und der Einnahme von Pillen, um dabei bei Verstand zu bleiben. Aber wenn es einen einfacheren Weg gibt, möchte ich das Rad nicht neu erfinden (obwohl dieser Programmierteil auf dem Nucleo viel größer aussieht als nur der CP2102N-Chip). Dieses Dokument zur Verwendung von UART gefunden: STM32 Bootloader UART scheint vielversprechend zu sein, es scheint nicht allzu schwierig zu sein, CP2102N zum Programmieren von STM32 zu verwenden, denke ich?

Natürlich habe ich mir auch ein paar Videos auf YouTube über STM32 angesehen, aber sie sind im Grunde "blinky-blinky" mit Nucleo, nicht mit Standalone-Geräten, also nicht viel über Datenblätter, alternative Funktionen, Steuerung von Sachen über Register; und das Einrichten von I2C oder SPI ist sowieso kein Problem. Grundsätzlich habe ich kein Problem damit, die Register und das Zeug zu kontrollieren, ich muss es nur zuerst zum Laufen bringen. Es ist, als könnte ich ein Auto fahren, aber ich habe keinen Schlüssel, um den Motor zu starten – oder vielleicht habe ich einen und bin mir dessen nur nicht bewusst. Um das Auto nicht beim Zünden explodieren zu lassen, stelle ich lieber erst Fragen.

Danke

Sie müssen das Referenzhandbuch herunterladen. Alle Ihre Fragen werden beantwortet.
Kurze Antwort: Laut Referenzhandbuch funktioniert swd sofort.

Antworten (1)

  1. Das ist richtig. Sie benötigen nur SWDIO & SWCLK. Meistens wird keine NRST-Verbindung benötigt. AFAIK, der Debugger kann eine Art Soft-Reset-Sequenz mit Daten- und Clock-Pins senden. Ein Hardware-Reset-Pin kann erforderlich sein, wenn SWDIO- und SWCLK-Pins unmittelbar nach dem Zurücksetzen als GPIO-Pins konfiguriert sind (bezogen auf Ihre zweite Frage), wodurch das Debuggen verhindert wird. Ich habe es nie gebraucht, aber es ist trotzdem ratsam, es in Ihren Debugging-Header aufzunehmen, wenn Sie Platz auf Ihrer Leiterplatte haben. Es gibt auch einen SWO-Pin, der bei Aktivierung eine zusätzliche Debug-Ausgabe liefert. Es ist nicht unbedingt erforderlich, und bei chinesischen ST-Link-Klonen ist der Stift nicht in ihrem Anschluss ausgebrochen, obwohl ihre Firmware dies unterstützt.
  2. Nach dem Zurücksetzen sind alle mit dem Debuggen verbundenen Pins verfügbar, es sei denn, Sie konfigurieren sie für andere Zwecke in Ihrer Firmware. Bei einigen Modellen gehören dazu die JTAG-Pins. Wenn Sie sie gleich zu Beginn Ihrer Firmware als GPIO-Pins (oder für andere Zwecke) konfigurieren, hat der Debugger möglicherweise keine Zeit, eine Debugging-Sitzung zu starten. In diesem Fall kann die Verwendung des Hardware-NRST-Pins erforderlich sein. BOOT-Pins haben nichts mit der Debug-Pin-Konfiguration zu tun. Sie konfigurieren das Mapping des Adressraums. Meistens verbinden Sie BOOT0 mit GND, um vom Flash zu booten. Das Booten aus dem RAM oder dem internen Werks-Bootloader ist ebenfalls möglich.
  3. Wie ich in Antwort 2 erwähnt habe, verfügen STM32-Geräte über interne Bootloader, die über den BOOT0-Pin aktiviert werden können (mit den richtigen OPTION-Bytes im Flash). Es ist auch möglich, vom Benutzercode in diesen werkseitig programmierten Bootloader zu springen. Obwohl es ein bisschen kompliziert ist, ist es möglich, Beispiele im Internet zu finden. Einige Geräte bieten auch USB-DFU-Bootloader (z. B. STM32F042). Wenn Sie diese Produkte verwenden, müssen Sie nicht einmal einen USB-Seriell-Konverter verwenden. Der werkseitig programmierte Bootloader unterstützt möglicherweise auch andere Schnittstellen wie SPI oder CAN, aber ich bin mir nicht sicher und kann mich nicht erinnern. Sie müssen die spezifische Gerätedokumentation überprüfen.

Übrigens wird der SWIM-Pin zum Programmieren und Debuggen von STM8-Teilen verwendet (ja, ST-Link ist dazu in der Lage). Es hat nichts mit STM32-Teilen zu tun.

Theoretisch muss ich also nicht einmal in den Bootloader booten, um das Ding zu programmieren, es ist über SWD programmierbar, selbst während es das Flash-Programm ausführt. Ist diese Aussage richtig? Ich werde SWD-Pins für nichts anderes verwenden, wenn ich SWD verwende. Und ich muss es immer noch an USB anschließen, damit der Endbenutzer die Firmware aktualisieren kann. Ich werde dafür ein kleines Programm schreiben, kein Problem, also ohne USB-Serial geht es nicht, wenn es überhaupt möglich ist, Flash-Speicher per UART zu programmieren. Es sei denn, ich lege das Programm auf die microSD-Karte, die ich habe (mit SPI dann)
Richtig, ST-Link kann einen STM32 stoppen und programmieren (oder debuggen), der vom Flash ausgeführt wird, vorausgesetzt, dass die SWD-Pins in den Standardzuständen belassen und nicht für andere Zwecke konfiguriert werden. Ihr STM32L051K8T6 scheint kein USB zu haben, daher benötigt der Endbenutzer wahrscheinlich einen USB-zu-Seriell-Konverter, um auf den werkseitig programmierten Bootloader zuzugreifen. Beachten Sie, dass einige Modelle, wie STM32F103, über USB-Hardware verfügen, ihnen jedoch kein werkseitig programmierter USB-Bootloader zur Verfügung steht.