Forum: Mikrocontroller und Digitale Elektronik STM32F103 Bootloader Problem


von foerch (Gast)


Lesenswert?

Guten Tag,
ich habe schon wieder eine Frage wo ich nicht weiter komme.
Ich möchte gerade den originalen Bootloader meines STM32F103 probieren.
Dazu habe ich an den Pins PA9 und PA10 einen TTL to 232 Converter 
angeschlossen. (Die Uart in meinem Code funktioniert.) Somit gehe ich 
davon aus das ich die richtigen pins und rx und tx richtig habe.
Denn Boot0 Pin habe ich auf 3.3v und nach einem Reset läuft die 
Applikation nicht los.
Wenn ich mich aber mit dem Flash Loader Demonstrator verbinden will 
scheitere ich.
was mache ich falsch?

Danke für Eure Hilfe

von Jens (Gast)


Lesenswert?

foerch schrieb:
> Denn Boot0 Pin habe ich auf 3.3v und nach einem Reset läuft die
> Applikation nicht los.

Der Prozessor wartet auf 0x7F und startet erst danach den Bootloader.
Siehe AN2606 §12.2.

Jens

von John P. (brushlesspower)


Lesenswert?

Jens schrieb:
> Der Prozessor wartet auf 0x7F und startet erst danach den Bootloader.
> Siehe AN2606 §12.2.

foerch schrieb:
> Wenn ich mich aber mit dem Flash Loader Demonstrator verbinden will
> scheitere ich.

Der Flash Loader demonstrator sendet aber die 0x7F von sich aus.

Das vorgehen des TO ist schon richtig.

Der Bootloader kann aber nicht nur an PA9&10 funktionieren.
Wenn an einer anderen UART/SPI/I2C daten ankommen will der Bootloader 
die 0x7F an dieser Schnittstelle haben.

Und der Boot1 Pin könnte noch auf dem falschen Pegel liegen.

von W.S. (Gast)


Lesenswert?

foerch schrieb:
> was mache ich falsch?

Dieses Programm von ST finde ich blöd, weil es bei Problemen lediglich 
eine Weile drauf herumkaut und dann nur lapidar "geht nicht!" meldet. Da 
weiß man nie, woran es tatsächlich liegt.

Lade dir hier aus dem Projekte-Bereich mein STM32-Brennprogramm mal 
herunter. Bei dem kannst du wenigstens deine Verbindungen austesten.

W.S.

von foerch (Gast)


Lesenswert?

John P. schrieb:
> Und der Boot1 Pin könnte noch auf dem falschen Pegel liegen.

Blöde Frage hat der STM32F103 einen Boot1  Pin?

W.S. schrieb:
> Lade dir hier aus dem Projekte-Bereich mein STM32-Brennprogramm mal
> herunter. Bei dem kannst du wenigstens deine Verbindungen austesten.

Wo finde ich das besagte Programm?

Lg
 und Danke

von temp (Gast)


Lesenswert?

W.S. schrieb:
> Lade dir hier aus dem Projekte-Bereich mein STM32-Brennprogramm mal
> herunter. Bei dem kannst du wenigstens deine Verbindungen austesten.
>
> W.S.

Das hab ich auch mal probiert. Allerdings ging mein Programm nicht bei 
0x08000000 sondern bei 0x08001000 los weil davor noch was anderes im 
Flash ist. Das hat dein Programm aber immer gleich mit Platt gemacht. 
Ist das nicht vorgesehen oder habe ich da was falsch eingestellt?

von ichbins (Gast)


Lesenswert?

"Once initialized, the USART1 configuration
is: 8 bits, even parity and 1 Stop bit."

Wird öfters übersehen.

von foerch (Gast)


Lesenswert?

ichbins schrieb:
> "Once initialized, the USART1 configuration
> is: 8 bits, even parity and 1 Stop bit."
>
> Wird öfters übersehen.

Das habe ich mehrmals kontrolliert.
Blöde Frage hat der STM32F103 einen Boot1  Pin?

Danke

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

foerch schrieb:
> Blöde Frage hat der STM32F103 einen Boot1  Pin?

Hat er. Aber warum schaust Du das nicht selber nach?

Wenn das ein STM32F103 auf dem "Mini-Delopment Board" (Blue Pill) ist, 
dann findest Du den Schaltplan hier:

https://www.mikrocontroller.net/wikifiles/c/c9/STM32F103C8T6_MiniDevBoard_Schematic.png

Die beiden Boot-Pins sind hier an Jumper angeschlossen, die Du leicht 
von HIGH nach LOW und zurück umstecken kannst.

von John P. (brushlesspower)


Lesenswert?

foerch schrieb:
> Blöde Frage hat der STM32F103 einen Boot1  Pin?

Ja. PB2

Datenblatt Seite 30


Der Bootloader im F103 benötigt Bootpattern No.1

Pattern No.1: Boot0 = High; Boot1 = Low

von foerch (Gast)


Lesenswert?

Frank M. schrieb:
> Hat er. Aber warum schaust Du das nicht selber nach?

Sorry habe nur auf den Schaltplan des Nucleo Board geschaut und dort ist 
der Pin PB2 nicht mit Boot1 angegeben.

John P. schrieb:
> Der Bootloader im F103 benötigt Bootpattern No.1
>
> Pattern No.1: Boot0 = High; Boot1 = Low

Auch mit dem Boot1 auf low funktioniert es nicht.

Was kann ich noch probieren?

Danke für die Hilfe

von Stefan F. (Gast)


Lesenswert?

Der serielle Bootloader wird gestartet, indem man Boot0=1 und Boot1=0 
setzt und dann einen Reset-Impuls gibt.

Um danach das eigene Programm zu starten, setzt man Boot0=0 und 
Boot1=egal, gefolgt von einem Reset-Impuls.

> Was kann ich noch probieren?

Stromversorgung und Pegel am Reset-Pin prüfen.

Mehr Infos dazu: http://stefanfrings.de/stm32/index.html

von foerch (Gast)


Lesenswert?

Stefanus F. schrieb:
> Mehr Infos dazu: http://stefanfrings.de/stm32/index.html

HAbe mir das Program STM32CubeProg    geholt und damit geht das 
Programmieren über den Bootloader anstandslos!
Danke für die Hilfe.

Noch eine Frage hätte ich wie wird das umschalten der Boot0 und Boot1 
Pins in der Praxis in Applikationen gemacht?
Schalter?

von Stefan F. (Gast)


Lesenswert?

foerch schrieb:
> Noch eine Frage hätte ich wie wird das umschalten der Boot0 und Boot1
> Pins in der Praxis in Applikationen gemacht?

Ich verwende Jumper. Aber nur selten, denn normalerweise verwendet ich 
die SWJ Schnittstelle.

von foerch (Gast)


Lesenswert?

Stefanus F. schrieb:
> Ich verwende Jumper. Aber nur selten, denn normalerweise verwendet ich
> die SWJ Schnittstelle.

Ist auch ziemlich umständlich. Kann man den Bootloader ändern das nur 
ein Reset nötig ist?

von Stefan F. (Gast)


Lesenswert?

foerch schrieb:
> Kann man den Bootloader ändern das nur ein Reset nötig ist?

Sicher, mit ein bisschen zusätzlicher Hardware drumherum wird das 
irgendwie gehen. Oder du verwendest einen eigenen Bootloader im Flash 
Speicher (wie den von Arduino), dann muss allerdings dein Programm auch 
darauf abgestimmt sein, da es nicht mehr an Adresse 0 beginnt und die 
IRQ Vektor Tabelle verschieben muss.

Ganz ehrlich: Ich würde davon abraten.

> Ist auch ziemlich umständlich.

Das ist aber besser so.

Das man bei PC's inzwischen das BIOS umflashen kann, ohne irgendeinen 
Jumper oder Schalter umstellen zu müssen, halte ich für eine Frechheit. 
Ich möchte nicht, dass irgendein Virus meinen PC buchstäblich kaputt 
machen kann!

Eigentlich fragen hier mehr Leute nach genau dem Gegenteil: wie man das 
automatische Starten des Arduino Bootloaders verhindert. Wenn man selber 
merkt, dass man gegen den Strom schwimmt, sollte man sich gut überlegen, 
ob man dabei auf dem richtigen Weg ist.

Also Kompromiss bietet sich ein Taster (an Boot0) an, den man beim 
Einschalten der Stromversorgung gedrückt hält.

Warum verwendest du keinen ST-Link Adapter? Damit könntest du sogar 
debuggen und brauchst keinen Jumper/Schalter.

von foerch (Gast)


Lesenswert?

Stefanus F. schrieb:
> Warum verwendest du keinen ST-Link Adapter? Damit könntest du sogar
> debuggen und brauchst keinen Jumper/Schalter.

Ich denke daran das man vielleicht irgendwann einen Firmware update 
machen kann ohne Entwicklungsumgebung

von Stefan F. (Gast)


Lesenswert?

foerch schrieb:
> Ich denke daran das man vielleicht irgendwann einen Firmware update
> machen kann ohne Entwicklungsumgebung

Das halte ich für ein sehr schwaches Argument. Jeder Dummkopf ist in der 
Lage, sich einen ST-Link Adapter zu kaufen und mit einem passenden 
Flachkabel anzustecken. Das kannst du ja gleich mit verkaufen.

Wer das nicht hin bekommt, der sollte besser kein Firmware Upgrade 
durchführen und sich an einen "Fachmann" wenden. Denn jeder 
Firmware-Wechsel bringt aus Risiken mit sich, mit denen kommt derjenige 
Dummkopf dann auch nicht klar. Willst du Leuten per Telefon helfen, die 
nicht einmal einen Schraubendreher in die Hand nehmen können?

Die ST-Link Adapter sind nicht einmal teurer als serielle USB Adapter. 
Die bekommt man ab ca 2,50€.
Und sie sind weniger problematisch, weil man nicht noch herausfinden 
muss, welcher COM Port zugewiesen wurde und welcher Treiber geeignet ist 
(ich erinnere nur an die immer noch verkauften Adapter mit Prolific 
Chip, für die es "offiziell" keine Windows 10 Treiber mehr gibt).
Du brauchst für ST-Link auch keine Entwicklungsumgebung. Es gibt für 
alle Betriebssysteme sowohl kleine kompakte Kommandozeilen-Tools als 
auch grafische Anwendungen ohne IDE.

von foerch (Gast)


Lesenswert?

Stefanus F. schrieb:
> Das halte ich für ein sehr schwaches Argument

Kann sein früher war halt so das man ao auch als Kunde ein Gerät updaten 
konnte.
Da hatt e allerdings jeder Pc noch eine Serielle Schnittstelle.

von Stefan F. (Gast)


Lesenswert?

foerch schrieb:
> Kann sein früher war halt so das man ao auch als Kunde ein Gerät updaten
> konnte.

Ja, "früher" musste man dafür einen Jumper umstecken, einen Schalter 
umstellen oder einen Taster gedrückt halten. Jedenfalls in Geräten, wo 
man Wert auf Sicherheit legte.

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.