Ich habe eine Weile angefangen, stm32-Mikrocontroller mit einem sehr kleinen Entwicklungsboard "stm32f103c8t6" (oder einer blauen Pille) zu lernen. Als ich anfing, habe ich aus einigen Tutorials gelernt, dass ich einen Jumper wechseln muss, um ihn zu programmieren.
(Das Foto ist ein Screenshot aus einem zufälligen Tutorial, aber jedes Tutorial, das ich gesehen habe, hat das auch gesagt.)
Der Jumper ändert - soweit ich weiß - nur den Startmodus des Prozessors, um ihn aus dem Systemspeicher (dem Bootloader) zu laden. Dies wird nur wirksam, wenn ich die Karte neu starte, um von dort aus mit dem Booten zu beginnen.
Ich weiß nicht, wie das ein "Programmiermodus" sein soll, da ich einen externen St-Link-Programmierer verwende, der SWD verwendet.
Also meine Frage hier: Gibt es wirklich so etwas wie "Programmiermodus"? und wenn ja, wie genau funktioniert es?
Erwähnenswert ist auch, dass ich gerade versucht habe, es zu programmieren, und das Programm so funktioniert hat, wie es soll (ich hoffe, ich habe nichts vermasselt: d).
quelle
Es gibt möglicherweise viele Möglichkeiten, die Karte mit verschiedenen Werkzeugen zu programmieren. Eine davon, die recht einfach zu sein scheint, ist die Verwendung von ST-Link V2 (google it) und OpenOCD.
Lassen Sie beide Boot-Jumper auf "0". Verbinden Sie die SWDIO-, SWCLK- und GND-Pins mit den entsprechenden Pins des ST-Links. Schalten Sie die Platine ein und achten Sie darauf, ob sie 5 V oder 3,3 V beträgt. Der ST-Link verfügt bequem über einen 3,3-V-Ausgang, der verwendet werden kann. Da die Karte 5 V vom USB-Anschluss empfängt, schließen Sie nicht gleichzeitig andere Stromanschlüsse an den USB-Anschluss an. Es kann nützlich sein, ein Kabel mit 4 Anschlüssen auf der ST-Link-Seite und geteilten 3 + 1-Anschlüssen auf der Platinenseite zu haben. Die Karte sollte eine LED aufleuchten lassen und kann mit der anderen LED zu blinken beginnen, wenn sie programmiert ist.
Wenn OpenOCD installiert ist, sind neuere Versionen möglicherweise weniger fehlerhaft (z. B. mindestens 0.9.x oder besser 0.10.x). Ältere Versionen, wie sie in Linux-Distributionen enthalten sind, haben möglicherweise Probleme mit dem Zurücksetzen der Konfiguration und erfordern das Herumspielen mit Konfigurationsdateien.
[optional] Wenn Sie Linux ausführen und OpenOCD nicht als Root ausführen können, erstellen Sie eine Datei
/etc/udev/rules.d
mit folgendem Inhalt:Dadurch können Mitglieder der
stlink
Gruppe auf das ST-Link-Gerät zugreifen. Erstellen Sie diese Gruppe und fügen Sie sich hinzu. Sie können jede geeignete Gruppe verwenden.Unter der Annahme eines Linux-Hosts und einer systemweiten OpenOCD-Standardinstallation prüfen Sie, ob die Konnektivität in Ordnung ist, die MCU aktiv ist und OpenOCD mit ihr kommunizieren kann:
Abhängig von der OpenOCD-Version kann auch Folgendes funktionieren:
Wenn die Dinge gut sind, druckt OpenOCD einige Informationen über die MCU (Spannung, Anzahl der HW-Haltepunkte usw.) und läuft weiter.
Es ist möglicherweise möglich, OpenOCD als Daemon auszuführen und Telnet zu verwenden, aber ich denke, es ist bequemer, es jedes Mal zu starten. Angenommen, Sie haben eine ordnungsgemäß kompilierte Binärdatei,
blinky.bin
können Sie sie beispielsweise mit dem folgenden Skript in die MCU programmieren:Beachten Sie, dass sich in diesem Skript der Dateiname befindet, den Sie anpassen müssen. Es ist wahrscheinlich eine gute Idee, mit etwas wirklich Einfachem zu beginnen.
Das oben Gesagte setzt hauptsächlich Linux als Host voraus, aber die Schritte sollten in Windows konzeptionell ähnlich sein, nachdem Treiber installiert und Anpassungen an der Installation vorgenommen wurden, z. B. Pfade usw.
quelle
Wenn Sie einen ST-Link (SWD) -Programmierer verwenden, müssen Sie die Karte nicht in den "Programmiermodus" versetzen.
Ein Bootloader ermöglicht es dem Chip, ein neues Programm "herunterzuladen" und auszuführen. Der Jumper "Programmiermodus" signalisiert dem ROM-Bootloader mithilfe der BOOT-Pins, dass er sich zum Herunterladen eines neuen Programms vorbereiten muss. Andernfalls führt der Chip das bereits im Speicher befindliche Programm aus. Da Sie SWD zum Programmieren verwenden, wird der ROM-Bootloader nicht benötigt.
[Bearbeiten]: Wie Chris Stratton und duskwuff weiter unten hervorheben, unterstützt der STM32F103 ROM-Bootloader keine Programmierung über USB, sondern nur über UART und kann nicht gelöscht werden. Es gibt einen separaten Benutzer-Flash-Bootloader , der auf die Karte geladen werden kann und die Programmierung über USB unterstützt (dh für die Verwendung mit Arduino IDE), jedoch nicht die BOOT-Pins verwendet (daher wird der Jumper "Programmiermodus" nicht beeinflusst). .
quelle