STM32 mit USB Bootloader

Hallo und willkommen bei unserem heutigen Beitrag.

 

Das STM32 Modul ist vielen ein Begriff. Bestückt mit einem 32-bit Arm Cortex spielt es in einer anderen Liga als z.B. der Nano V3.

Ich selbst muss jedoch eingestehen, dass ich in der Regel zum Nano V3 greife wenn ich ein Projekt beginne, und erst zum STM32 wechsele wenn ich feststelle, dass der Nano nicht mehr ausreicht. Hauptgrund ist die Tatsache, dass ich für den STM32 immer einen FTDI Adapter anschließen muss, während ich einen Nano V3 einfach per USB anschließen kann.

Der STM32 hat zwar auch einen USB Anschluss, aber dieser wird nur dazu verwendet das Modul mit Strom zu versorgen.

Eines der Gründe dafür ist, dass der STM32 nicht mit einem USB Bootloader ausgeliefert wird. Dieser Bootloader belegt etwa 20k Speicherplatz. Da ich jedoch noch nie absichtlich an die Grenze von 64k gestoßen bin, versuchen wir heute den USB Bootloader zu flashen.

Dazu benötigen wir:

1x STM32 Mikrocontroller + MicroUSB Kabel
1x USB FTDI Adapter + MiniUSB Kabel
Jumperkabel
Geduld und starke Nerven

Im ersten Schritt stellen wir sicher, dass der Jumper des FTDI-Adapters auf 3,3V eingestellt ist, und verbinden wir die Bauteile wie folgt:

 STM32 FTDI Adapter
G GND
A10 TX
A9 RX

 

Wer sich sicher ist, dass sein FTDI Adapter auf VCC saubere 3,3V ausgibt (lieber zuerst nachmessen) kann seinen STM32 darüber mit Strom versorgen. Ich habe damit jedoch in der Vergangenheit schlechte Erfahrungen gemacht, und versorge meinen STM32 lieber über USB mit Strom. Wir schließen den FTDI Adapter an den PC an, und wählen das Richtige Modul in der Arduino IDE aus:

 

Wenn im Boardverwalter kein STM32 auftaucht, müssen die entsprechenden Treiber noch installiert werden.

Dafür müssen Sie als erstes die "Arduino SAM" Unterstützung über den Boardverwalter installieren. Dies ist notwendig um die arm-none-eabi-g++ Toolchain zu installieren.

 

Als nächstes benötigen wir die Dateien für den STM32 welche wir bei GitHub herunterladen können: https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip 

Diese entpacken wir im Arduino Verzeichnis C:\Users\<Benutzer>\Documents\Arduino\hardware\Arduino_STM32.

Falls der Ordner "hardware" noch nicht existiert können wir diesen einfach anlegen.

Nun müsen wir noch die Treiber für den Seriellen Upload installieren, indem wir im Arduino_STM32 Ordner unter "drivers" -> "win" die Datei "install_drivers.bat" als Administrator ausführen.

Falls irgendwann in der Zukunft (typischerweise nach einem automatischen Windows Update) der STM32 nicht mehr programmieren lässt, hilft es in der Regel die oben gezeigte Treiberinstallation nochmals durchzuführen.

Nun sollte nach einem Neustart der Arduino IDE das Board zur Auswahl stehen.

Über "Datei"  -> "Beispiele" -> "A_STM32_Examples" -> "Digital" -> "Blink" öffnen wir nun den Blink Beispielsketch und ändern den Pin an 3 Stellen von PB1 auch PC13.

 Zum schluß setzen wir noch den BOOT0 Jumper auf dem STM32 auf 1, und laden das Blink Programm hoch.

 

Falls an dieser Stelle Probleme auftauchen sollten, überprüfen Sie bitte die Verkabelung, und stellen Sie sicher, dass die Einstellungen zu Ihrem STM32 Board passen.

 

Als nächstes benötigen wir das Programm "STM32 Flash loader demonstrator (UM0462)" welches wir auf der Herstellerseite herunterladen können. Nach der Registrierung auf der Herstellerseite können wir das Programm herunterladen und installieren.

Als letztes benötigen wir noch die Binaries mit dem USB Bootloader. Diese finden Sie auch auf GitHub unter https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries.

Wir benötigen für unser Modul die Datei "generic_boot20_pc13.bin". 

Wir starten den Flash Loader Demonstrator, wählen den für uns richtigen Port aus, und klicken auf "Next".

Wenn das Programm an dieser Stelle einfriert, kann es ein Paar Minuten dauern bis eine Fehlermeldung erscheint. In dem Fall einfach sicherstellen das der Jumper BOOT0 auf 1 steht, und den STM32 mit der Reset-Taste neu starten, dann sollte es gehen.

Die nächsten beiden Fenster zeigen uns Informationen zur Flash Größe an. Diese können wir mittels "Next" überspringen.

Im letzten Fenster müssen wir "Download to device" auswählen, und die .bin Datei auswählen. 

Wenn die .bin Datei nicht angezeigt wird, ändern Sie bitte die Dateiendung von "s19 Files (*.s10)" auf "Bin Files (*.bin)".

Nun laden wir die Firmware auf unseren STM32. Nach wenigen Sekunden sollte folgende Meldung erscheinen:

Bevor wir nun etwas machen, sollten wir den BOOT0 Jumper von 1 auf 0 setzen, da ansonsten nach einem Neustart der Bootloader wieder weg ist. Wir können nun den FTDI Adapter trennen, und unseren STM direkt per USB anschließen.

Im Gerätemanager (Win+R drücken und devmgmt.msc eingeben) sollte nun ein neuer Eintrag unter "Anschlüsse (COM & LPT)" erscheinen:

 

 

Um zu testen ob es jetzt funktioniert, versuchen wir unseren Blink Sketch nochmals hoch zu laden. Dafür ändern wir bei den Board Einstellungen die Upload Methode auf "STM32duino bootloader".

 

Der Upload sollte nach wenigen Sekunden abgeschlossen sein, und unsere onboard LED fängt wieder an zu blinken. Die Fehlermeldung zum usb_reset können wir ignorieren.

Geschafft! Ab sofort zählt bei mir Faulheit nicht mehr als Ausrede um den STM32 in der Schublade liegen zu lassen.

Ich hoffe unser Heutiger Beitrag hat Ihnen gefallen, und hilft Ihnen den Schritt in die Welt der 32-Bit Mikrocontroller zu wagen.

 

Ich wünsche allen ein schönes Wochenende und viel Spaß beim Basteln.

Ihr Markus Neumann

 

 

Letzter Artikel Unser Farbsensor TCS230 (ohne Bibliothek)
Neuer Artikel USB-Adapter erweitern mit Flash Jumper und Reset Taster

Kommentar

Matthias - Juli 31, 2018

Wow, hab ich lange versucht aber nie hinbekommen, vielen Dank :-)

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe