STM32F103 Bootloader Problem

Gast #5746095
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
#5746177
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.
Gast #5746182
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.
Gast #5746268
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?
Moderator Persönliche Seite #5746318
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.
Gast #5746340
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
Gast #5746470
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
Gast #5746886
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.
Gast #5746939
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren