Forum: Mikrocontroller und Digitale Elektronik STM32F0 Bootloader-Problem (UART, Neuling braucht Hilfe)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite



Lesenswert?

Hallo liebe Leute!
Ich muss ein bisschen weiter "ausholen":

Ich habe mein erstes Board mit einem STM32-Controller entworfen. Konkret 
ist es der STM32F030C8T6. Ich habe vorher noch nie mit STM32- oder 
STM8-Controllern gearbeitet.

Ich hab heute Morgen das Board zum ersten Mal eingeschaltet.
Soweit scheint es auch zu klappen.
Ich hab die CubeIDE installiert, kann Code erstellen, kompilieren und 
über ein ST-Link v2 auch Flashen + Debuggen (z.B. LED blinken lassen).

Ich hab ferner CubeProgrammer installiert.
Dort kann ich mich auch mit dem ST-Link mit dem Controller auf meinem 
Board verbinden.

Nun hab ich gelesen, dass diese Controller einen Bootloader ab Werk 
drauf haben (zumindest habe ich das so verstanden).

Auf meinem Board ist ein USB-Seriell-Wandler CP2102.

Der Chip funktioniert. Ich habe in CubeIDE die UART1-Schnittstelle 
konfiguriert und sende in der while(1) mit 1s Pause "Hallo Welt", dies 
wird mir am PC mit HTerm angezeigt *). Auch habe ich mal, während der 
Controller im Reset war, die RX/TX-Leitungen miteinander kurzgeschlossen 
und wenn ich dann ein Zeichen vom PC sende, dann kommt es am PC auch 
korrekt zurück.

*) anfangs kamen bei HTerm nur falsche Zeichen an. Ich weiß nicht, woran 
es lag, später wurden die Zeichen dann korrekt angezeigt. Mein Board hat 
keinen Quarz, es nutzt den Chip-internen RC-Oszillator in 
Standard-Konfiguration. Vielleicht liegt da auch schon die Ursache 
meines Problems... (?) da ärgere ich mich schon über mich selbst, denn 
die Pins für einen Quarz nutze ich nicht, ich war nur "zu geizig" den 
Einzubauen...

Ich habe kein Oszi oder Logik-Analyzer hier, nur Multimeter.


Nun zum eigentlichen Problem:
ich kann keine Verbindung zwischen CubeProgrammer und Bootloader 
herstellen. Der Verbindungsversuch bricht immer ab.
Ich habe den korrekten COM-Port ausgewählt. Der Port ist auch nicht 
blockiert durch andere Anwendungen. Der ST-Link ist während des Versuchs 
nicht angeschlossen. Ich halte den BOOT0 auf HIGH und mache dann einen 
RESET des Controllers und versuche anschließend die Verbindung 
herzustellen (nachdem ich den RESET wieder losgelassen habe).


Im Anhang Screenshots der Schaltung.

Hat jemand eine Idee, an welchen Stellen ich den Fehler suchen könnte?

Wie beschrieben, bin ich totaler Neuling was diese Controller + Tools 
angeht...

Schöne Grüße und danke für alle, die versuchen wollen zu helfen!
Alex

von jo mei (Gast)


Lesenswert?

Nun ja, ob der Chip-interne RC-Oszillator genau genug ist kannst
du ja im Datenblatt nachlesen und daraus schliessen ob die
Baudrate genau genug erkannt wird.

Die Geizigkeit einen Quarz und zwei Kondensatoren wegzulassen
wurde jedenfalls schon oft bestraft. Zur Not kann man das auch
nachträglich provisorisch dazufrickeln.

von Frank K. (fchk)


Lesenswert?

Alex B. schrieb:

> Nun hab ich gelesen, dass diese Controller einen Bootloader ab Werk
> drauf haben (zumindest habe ich das so verstanden).

Ja. Siehe Datenblatt unter 
https://www.st.com/resource/en/datasheet/stm32f030c8.pdf Seite 12/93, 
Abschnitt 3.3 Boot Modes.

Da steht ganz klar:

"The boot loader is located in System Memory. It is used to reprogram 
the Flash memory by using USART on pins PA14/PA15 or PA9/PA10."

Du nutzt aber PB6/PB7. Damit geht es halt nicht.

fchk

von Loeten (Gast)


Lesenswert?

AN2606 ist das Dokument der Wahl hier. Dort hättest du gesehen, dass PB6 
und PB7 für den internen bootloader nicht funktionieren.

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Danke für dein Feedback.

jo mei schrieb:
> Nun ja, ob der Chip-interne RC-Oszillator genau genug ist kannst
> du ja im Datenblatt nachlesen und daraus schliessen ob die
> Baudrate genau genug erkannt wird.

Ich finde das DB da schwer verständlich. Da steht die Genauigkeit bei 
25°C sei +/-1% (factory calibrated) aber zusätzlich "note 3", die da 
lautet "with user calibration".

Ist der Oszillator als 1% genau ab Werk oder nur wenn ich ihn 
Kalibriere?

Wie genau muss UART überhaupt sein? 2%? Kann man das verbessern durch 
Reduzierung der Baudrate? (die Frage ist vielleicht dumm, da es ja 
prozentuale Werte sind...?).

jo mei schrieb:
> Zur Not kann man das auch
> nachträglich provisorisch dazufrickeln.

Ja klar... dazu gibt es ja TP4 und TP5... möglich ist das schon. Wäre 
halt nur 1) doof, 2) hässlich und 3) muss ich die Teile erstmal irgendwo 
her besorgen... :-)

Die USB-Schnittstelle brauch ich eigentlich gar nicht, in erster Linie 
dient die zur Spannungsversorgung. Das mit dem Bootloader war mir sogar 
erst hinterher aufgefallen...

Also könnte es an dem Oszillator liegen?
Wie geschrieben kamen ja zu Beginn auch nur "falsche Zeichen" bei HTerm 
an, das legt ja den Verdacht mit der mangelnden Genauigkeit nahe.

Viele Grüße,
Alex

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Loeten schrieb:
> AN2606 ist das Dokument der Wahl hier. Dort hättest du gesehen,
> dass PB6
> und PB7 für den internen bootloader nicht funktionieren.

Frank K. schrieb:
> Alex B. schrieb:
>
>> Nun hab ich gelesen, dass diese Controller einen Bootloader ab Werk
>> drauf haben (zumindest habe ich das so verstanden).
>
> Ja. Siehe Datenblatt unter
> https://www.st.com/resource/en/datasheet/stm32f030c8.pdf Seite 12/93,
> Abschnitt 3.3 Boot Modes.
>
> Da steht ganz klar:
>
> "The boot loader is located in System Memory. It is used to reprogram
> the Flash memory by using USART on pins PA14/PA15 or PA9/PA10."
>
> Du nutzt aber PB6/PB7. Damit geht es halt nicht.
>
> fchk



Alles klar... danke! :-)
Hätte mich vorher näher damit beschäftigen sollen.

Danke!!!
Schönes Wochenende,
Alex

von Bauform B. (bauformb)


Lesenswert?

Alex B. schrieb:
> Also könnte es an dem Oszillator liegen?
> Wie geschrieben kamen ja zu Beginn auch nur "falsche Zeichen" bei HTerm
> an, das legt ja den Verdacht mit der mangelnden Genauigkeit nahe.

Ja, das kann sein. UARTs stecken 2 bis 3% Fehler weg, aber der HSI ist, 
nun ja, es gibt deutlich bessere. Die note(1) im Datenblatt ist auch 
ernst gemeint; STM gibt ja sowieso nur typische Werte an.

Das betrifft aber nicht den internen Bootloader, der konfiguriert das 
UART automatisch passend zur Baudrate vom PC. Dadurch ist die Frequenz 
des HSI relativ egal. Ein Quarz ist dafür nicht nötig und würde auch 
nicht benutzt werden. Eine niedrigere Baudrate hilft allerdings, oder 
besser gesagt, bei hohen Baudraten reicht die Auflösung des Teilers 
einfach nicht mehr.

Dein eigenes Programm kann dank HSITRIM auch ohne Quarz auskommen, wenn 
es irgendeine Referenzfrequenz gibt. Sehr beliebt ist der 1Hz-Takt von 
einer RTC (extern oder intern), oder die Netzfrequenz oder eben eine 
serielle Verbindung irgendwo hin.

Geheimtipp: Die meisten internen Bootloader können dein Programm auch 
ins RAM laden. Beim F030x8 braucht der Bootloader die unteren 2K selber, 
bleiben also immerhin 6K für eigene Programme. So kann man jede kleine 
Programmänderung sofort testen, ohne das Flash zu stressen.

von Alex22 (Gast)


Lesenswert?

Bauform B. schrieb:
> Das betrifft aber nicht den internen Bootloader, der konfiguriert das
> UART automatisch passend zur Baudrate vom PC

Klasse, vielen Dank für den Hinweis.

Wie andere weiter oben ja schon geschrieben haben wird es wohl an meiner 
Wahl der Pins liegen.

Wie beschrieben hatte ich ja das bootloader-Feature sogar erst bemerkt, 
nachdem die Platine schon in der Fertigung war.

Also für das redesign (sofern es denn eines geben wird, denn die 
eigentliche Funktion der Platine ist gegeben):
1) Quarz, damit dass UART via USB (sofern irgendwann in Zukunft 
benötigt) besser funktioniert
2) UART auf andere Pins legen, welche vom bootloader unterstützt werden 
(erfordert leider dann auch ein Software-Update, denn die Pins sind alle 
schon in Benutzung)

Vielen Dank euch allen. Ganz ernst gemeint.
Schön, dass es dieses Forum gibt, wo einem so schnell und kompetent 
geholfen wird.

von Bauform B. (bauformb)


Lesenswert?

Alex22 schrieb:
> UART auf andere Pins legen, welche vom bootloader unterstützt werden

 * nahezu alle Bootloader in allen STM32 unterstützen PA9 und PA10
 * an PA9/PA10 hängt das gleiche UART1 wie an PB6/PB7
 * das UART auf PA14/PA15 kollidiert mit der SWD-Schnittstelle
 * PA2/PA3 geht nicht, außerdem sind das wertvolle ADC-Pins

von Alex22 (Gast)


Lesenswert?

Bauform B. schrieb:
> an PA9/PA10 hängt das gleiche UART1 wie an PB6/PB7
> das UART auf PA14/PA15 kollidiert mit der SWD-Schnittstelle

Danke dir! Genau das hatte ich zwischenzeitlich auch im DB gesehen und 
würde es dann auch so machen.

Gruß,
Alex

von W.S. (Gast)


Lesenswert?

Alex22 schrieb:
> Wie beschrieben hatte ich ja das bootloader-Feature sogar erst bemerkt,
> nachdem die Platine schon in der Fertigung war.

Tja, das kommt davon, wenn man glaubt, das Installieren von 
Herstellertools und Hersteller-Libs sei wichtiger als das Lesen des 
Manuals.

Sieh mal da:
Beitrag "Re: STM32 USART mit falscher Baudrate"
Das ist zwar schon einige Jahre alt und ist für den STM32F103C8T6, 
dürfte allerdings deinem Entwurf einigermaßen nahe kommen. Der dortige 
Programmierstecker hat die Signale so, daß man sowohl per Bootlader als 
auch mit SWD-Geschirre das Ding programmieren kann. Vielleicht kannst du 
daraus einige Anregungen entnehmen.

W.S.

von Stefan ⛄ F. (stefanus)


Lesenswert?

W.S. schrieb:
> Tja, das kommt davon, wenn man glaubt, das Installieren von
> Herstellertools und Hersteller-Libs sei wichtiger als das Lesen des
> Manuals.

Jein. Ich selbst habe das so erlebt:

Der Umgang mit der IDE und die umfangreiche Doku der HAL haben mich 
erstmal so hoch ausgelastet, dass ich mich nicht imstande fühlte, auch 
noch das Datenblatt und das Referenzhandbuch zu lesen. Immerhin sind das 
zusammen weit mehr als 3000 Seiten Doku. Die liest zwar niemand 
komplett am Stück durch, aber man muss lernen, die gerade relevanten 
Stellen zu finden.

Deswegen empfehle ich immer, zuerst ohne Cube MX und HAL anzufangen. 
Wenn man den Dreh raus hat, wie der Chip funktioniert und dokumentiert 
ist, kommt man mit der HAL viel besser klar.

: Bearbeitet durch User
von Alex22 (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Der Umgang mit der IDE und die umfangreiche Doku der HAL haben mich
> erstmal so hoch ausgelastet, dass ich mich nicht imstande fühlte, auch
> noch das Datenblatt und das Referenzhandbuch zu lesen.

Und in meinem konkreten Fall ist es so, dass mir völlig egal war, 
welcher Mikrocontroller auf meiner Platine sein würde und von welchem 
Hersteller usw.. ich brauchte nur "irgendeinen Controller" mit ca. 32 
GPIO. Und der STM32F0 war halt gerade für 1,20€ oder so verfügbar.
Ich hab deshalb im Prinzip nur genau die Stellen im Datenblatt 
angeschaut, die für meine Anwendung relevant waren.

Von HAL wusste ich zu dem Zeitpunkt gar nix.

Was ich noch geprüft hatte war, dass IDE inkl. Compiler und Flasher 
gratis ist, also keine Folgekosten auf mich zukommen.

Dass der Chip einen bootloader ab Werk hat ist ein tolles Feature, 
welches ich in Zukunft auch sicherlich nutzen werde. Aber für diese 
Anwendung wäre es in Prinzip "das Sahnehäubchen" gewesen :-)

Schönen Sonntag allerseits.
Alex

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.