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
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.
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
AN2606 ist das Dokument der Wahl hier. Dort hättest du gesehen, dass PB6 und PB7 für den internen bootloader nicht funktionieren.
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
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
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.
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.
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
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
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.