Forum: Mikrocontroller und Digitale Elektronik Bluepill STM32F103C8x Arduino Bootloader


von Jürgen (derkleinemuck)


Angehängte Dateien:

Lesenswert?

Ich habe diverse China-Exemplare der Bluepill und kann sie alle 
problemlos über ST-Link mit CubeIDE und Arduino IDE (STM32duino 
https://github.com/stm32duino) programmieren. Der R für den USB-Port ist 
auch immer 1k5.
Ich möchte es aber auch mit der Arduino IDE und dem USB-Bootloader 
ausprobieren. Komme aber seit Stunden nicht weiter.
Es gibt diverse Anleitungen. Wie

https://cool-web.de/arduino/stm32duino-bootloader-flashen-fuer-usb-zugriff-auf-stm32.htm

https://mischianti.org/stm32-programming-stm32f1-via-usb-with-stm32duino-boot-loader-2/

https://www.forward.com.au/pfod/ArduinoProgramming/STM32/index.html

https://www.pcb-hero.com/blogs/lickys-column/how-to-upload-stm32f103c8t6-usb-bootloader-program-stm32-blue-pill-via-usb

https://www.sgbotic.com/index.php?dispatch=pages.view&page_id=48

Alle sind mehr oder weniger ähnlich und nutzen entweder 
https://github.com/rogerclarkmelbourne/STM32duino-bootloader/blob/master/binaries/generic_boot20_pc13.bin 
oder auch einen HID 
https://github.com/Serasidis/STM32_HID_Bootloader/releases

Ich brenne die BINs mit dem CubeProgrammer (auch das klappt und auch mit 
anderen BINs).

Das mit dem HID klappt gar nicht, da wird kein Gerät in Windows erkannt.

Mit dem generic_boot20_pc13.bin klappt so halb: Auf dem einen Windows 
(beides Win 11) wird nach der Treiberinstallation "Maple Serial" 
angezeigt, bei dem anderen "Serielles USB-Gerät" - merkwürdig
Aber es klappt dann einmal ein Programm zu übertragen mittels Methode 
"Maple DFU Bootloader 2.0" in Arduino.
Danach ist der Bootloader zwar wohl noch im STM32 (die Status-LED blinkt 
mehrmals schnell) aber der COM-Port verschwindet einfach aus dem 
Geräte-Manager. Danach wird ein Unbeanntes Gerät angezeigt und wenn ich 
Reset an der Bluepill drücke, ist gar kein Port und keine Fehlermeldung 
mehr da.
Ich muss dann das BIN neu brennen. Ist ja wohl nicht Sinn der Sache.

Hat jemand eine Idee?

von Nemopuk (nemopuk)


Lesenswert?

Da dein Pull-up nicht geschaltet ist, musst du eventuell immer das USB 
Kabel abstecken und wieder anstecken, damit Windows das Gerät neu (als 
Maple Bootloader) erkennt. Wenn dein Board eine eigene Stromversorgung 
hat, musst du beim Anstecken zugleich auch noch den Reset Taster 
drücken.

Der Maple Bootloader ist nur sehr kurz nach dem Reset aktiv, bevor er 
dein Programm startet. In dieser kurzen Zeitspanne muss Windows das USB 
Gerät erkennen und den Treiber laden, und du musst den Upload starten. 
In dem Moment wo dein Programm startet ist der Bootloader beendet.

Das funktioniert alles sehr hakelig. Deswegen kann ich den Maple 
Bootloader nicht empfehlen.

Dein eigenes Programm hat keinen USB Support  weil du das so in der 
Arduino IDE eingestellt hast.

Siehe auch http://stefanfrings.de/stm32/stm32f1.html

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jürgen schrieb:
> Komme aber seit Stunden nicht weiter.

Lohnt sich der Aufwand, da du ja einen ST-Link hast, mit dem man nicht 
nur flashen sondern auch debuggen kann, was eh viel besser ist...

von Jürgen (derkleinemuck)


Angehängte Dateien:

Lesenswert?

Nemopuk schrieb:
> Der Maple Bootloader ist nur sehr kurz nach dem Reset aktiv, bevor er
> dein Programm startet. In dieser kurzen Zeitspanne muss Windows das USB
> Gerät erkennen und den Treiber laden, und du musst den Upload starten.
> In dem Moment wo dein Programm startet ist der Bootloader beendet.
>
Ernsthaft? Warum lese ich nirgends was darüber?
Also ich bekomme es nicht hin, Reset zu drücken und den Zeitpunkt 
abzupassen.  Wie soll das gehen?

Nemopuk schrieb:
> Das funktioniert alles sehr hakelig. Deswegen kann ich den Maple
> Bootloader nicht empfehlen.

Gibt's 'ne Alternative?

Nemopuk schrieb:
> Dein eigenes Programm hat keinen USB Support  weil du das so in der
> Arduino IDE eingestellt hast.

Schon klar. Ich will erst einmal die Basics erkunden. Hat auch nichts 
damit zu tun, was besser sein mag.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jürgen schrieb:
> Gibt's 'ne Alternative?

ST-Link, oder nicht den allerersten Ur-STM32 nehmen, sondern einen etwas 
moderneren - die haben einen funktionierenden USB-Bootloader im ROM, den 
man über den BOOT0-Pin aktiviert. Kann man auch nicht versehentlich 
löschen/überschreiben.

: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

Jürgen schrieb:
> Ernsthaft? Warum lese ich nirgends was darüber?

Ja ernsthaft. Es gibt jur nich wenige Infos dazu, weil der Hersteller 
Leaflabs den Support für due Maple Board vor 10 Jahren beendet hat. 
Danach gab es noch ein bisschen Flickwerk von Roger Ckarks (steht 
übrigens auf der genannten Webseite).

> Gibt's 'ne Alternative?

Modernere Mikrocontroller. Man muss ja nicht unbedingt den allerersten 
STM32 nehmen. Der STM32F303 ist als Nachfolger angetreten und enthält ab 
Werk einen anderen (unproblematischen) Bootloader.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Nemopuk schrieb:
> Der STM32F303 ist als Nachfolger angetreten

Hm, sicher? Der ist ja ein Cortex-M4 und auch für "mixed signal" 
konzipiert, und mittlerweile auch schon älter.

Sind die Nachfolger nicht eher zwischen STM32G0, STM32G4 und STM32U3 zu 
suchen?

von Jürgen (derkleinemuck)


Lesenswert?

Wie so oft beim Basteln: es geht nicht darum, was besser ist etc., 
sondern was einen gerade interessiert. Ich will und werde nicht zu 
irgendwas wechseln, nur weil es neu ist.

Irgendwie haben die Leute das ja "damals" in der guten alten Zeit auch 
mit dem Bootloader hinbekommen. Warum sollte es also nicht gehen?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jürgen schrieb:
> Warum sollte es also nicht gehen?

Es geht schon, aber ist es sinnvoll/praktikabel? Ändere doch den 
Sourcecode des Bootloaders damit er länger aufs Verbinden wartet, oder 
endlos wartet falls beim Start ein Input-Pin gesetzt war (ähnlich 
BOOT0-Pin).

Bei der Gelegenheit, falls du es noch nicht kennst:
https://www.mikrocontroller.net/articles/USB-Tutorial_mit_STM32

zur Arbeit mit USB beim STM32F1.

von Nemopuk (nemopuk)


Lesenswert?

Niklas G. schrieb:
>>Der STM32F303 ist als Nachfolger angetreten
> Hm, sicher?

https://www.st.com/resource/en/application_note/dm00073522-migrating-from-stm32f1-series-to-stm32f3-series-microcontrollers-stmicroelectronics.pdf

Die G Serie ist noch neuer und wird sicher wiederum bald wiederum 
Nachfolger haben.

: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

Jürgen schrieb:
> Warum sollte es also nicht gehen?

Es geht ja, nur sehr hakelig. Mich hat der Maple Bootloader nicht 
überzeugt.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Nemopuk schrieb:
> 
https://www.st.com/resource/en/application_note/dm00073522-migrating-from-stm32f1-series-to-stm32f3-series-microcontrollers-stmicroelectronics.pdf

Interessant, mir scheint aber dass der F303 eher als Upgrade (mit guter 
Kompatibilität) denn als Ersatz gedacht ist; ein leistungsmäßig (und 
preismäßiger?) direkter aber modernisierter Ersatz für den F103 scheint 
nicht wirklich zu existieren. Ist vielleicht auch gar nicht nötig, weil 
die moderneren Serien die Grenzen einfach nur woanders gelegt haben aber 
dennoch alles abdecken.

Nemopuk schrieb:
> Mich hat der Maple Bootloader nicht
> überzeugt.

Mich auch nicht; als der damals noch aktuell war, hab ich ihn auch nicht 
benutzt und die Maple IDE schon gar nicht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.