Ein STM32L011 mit BOOT0 und keinen Boot1 pin läuft mit dem internen RC Oszillator. Damit die Anwendung losläuft, muß BOOT0 beim Einschalten auf Low gehalten werden. Wegen der kleinen Pinanzahl möchte ich diesen nebenbei auch als Eingang benutzen. Daher ist Boot0 über einen RC Glied auf GND gezogen was später vom Eingangssignal übersteuert werden kann. Da der Low Pegel offensichtlich ziemlich niedrig ist, wird ein unerwartet großer Kondensator benötigt. 10uF/4,7k (Tau 25mS) funktionieren zuverlässig, der halbe Wert nicht. Von der ansteigenden Flanke der Versorgung bis daß die Software einen Ausgang einschalten kann, habe ich 7mSek experimentell ermittelt. Es wird eine durchschnittliche (low level lib) Initialisierung durchlaufen welche aber vermutlich kaum zu dieser langen Zeit beträgt. Im Datenblatt findet man leider relativ wenig zu dieser offensichtlich von vielen Parametern abhängigen Anlaufzeit. Lassen sich die 7mS durch schlaue Maßnahmen noch deutlich verkürzen bzw. hat das schon mal jeamand auch für andere STM32 untersucht?
Der Boot Pin wird während der ersten paar Taktzyklen ausgewertet, die angabe findet sich meine ich im Reference Manual. Danach sollte der Pegel keine Rolle mehr spielen. Edit: Reference Manual 2.4 Boot configuration - Seite 56/57
:
Bearbeitet durch User
Vermutlich spukt mir auch das Schaltnetzteil in die Suppe. Die steigende Flanke braucht 3mSek bis sie auf 3,5V ist. Trotzdem sind die 7mS noch anschliessend, vermutlich also auch die PLL bis eingeregelt hat?
:
Bearbeitet durch User
Eventuell kannst du den Boot0-Pin mit dem Option Bytes auch so konfigurieren, dass er den nicht mehr auswertet beim Booten. Wenn die Bits nBOOT_SEL und nBOOT0 beide 1 sind, ist der Boot0-Pin egal. Ob dein Chip ein Category 1 Chip ist musst du aber noch selbst rausfinden.
Kann du nicht einfach einen anderen Widerstand verwenden? Zum Beispiel 10µF und 100kΩ.
Eine andere Möglichkeit wäre, den Pin per 100k auf GND zu ziehen und das Eingangssignal über einen 74LVC1G125/126 zu leiten. Der bräuchte dann ein Signal, der den Pin freigibt. Keine Ahnung, ob Du das irgendwo herzaubern kannst, ggf. über ein 74LVC1G74 Flipflop. Aber das wird dann wahrscheinlich eh so komplex, dass es sinnvoller ist, einfach den nächstgrößeren Chip zu nehmen. So viel teurer wird der auch nicht sein, und dann hast Du das Problem eh nicht mehr. fchk
Evt. wird es übersichtlicher, wenn du den BOOT-Pin als Ausgang benutzt. Dann kann ein Pull-Down beim Einschalten einen definierten Low-Pegel erzeugen, und zwar genau so lange, bis das Programm auf Output umschaltet und High ausgibt. Bonus: das spart einen fetten Kondensator. J. V. schrieb: > Vermutlich spukt mir auch das Schaltnetzteil in die Suppe. Die steigende > Flanke braucht 3mSek bis sie auf 3,5V ist. Trotzdem sind die 7mS noch > anschliessend, vermutlich also auch die PLL bis eingeregelt hat? Dann sind es eher mehr als 8ms weil die Brown Out Reset-Schaltschwelle kleiner als 2V ist. Von der Zeit sind 3.3ms offiziell erlaubt ("Reset temporization"). Die internen Oszillatoren starten in wenigen µs, wie lange die PLL braucht, weiß man nicht. Brauchst du denn wirklich mehr als 2 MHz? Und zwar sofort? Es könnte schneller gehen, wenn du die PLL erst später einschaltest und die zeitkritischen Dinge zu Anfang mit den 2 MHz erledigst.
Bauform B. schrieb: > Die internen Oszillatoren starten in wenigen µs, wie > lange die PLL braucht, weiß man nicht. 115 µs typisch und 160 µs maximal. Steht so im Datenblatt Abschnitt 6.3.8 S. 70/119. Zum Vergleich braucht ein L431 max. 40 µs und ein F407 max. 300 µs. > Evt. wird es übersichtlicher, wenn du den BOOT-Pin als Ausgang benutzt. Beste Lösung!
Boot pin als Ausgang gefällt mir auch. Allerdings hat auch die Lösung über das Option Byte etwas an sich da ich den Bootlader (bislang) nicht benutze. Solang ich kein eigenes Programm zum setzen der Option Bytes schreiben möchte - gibt es ein Tool von ST welches das im Dialog machen kann? Ich habe ausserdem ein Segger Kabel aber sowohl im Ozone wie auch im J-Flash keine Dialoge fürs Option Byte gefunden. Allerdings kann Segger die CPU Modelle im Projekt mit und ohne Option-Byte auswählen - zu was das dann immer auch ohne dazu passenden Dialog sein soll.
STM32CubeProgrammer kann darauf zugreifen. Ich würde dennoch den Grundzustand belassen, daß auch ein frischer µC unverändert eingesetzt werden kann. https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/76/3e/bd/0d/cf/4d/45/25/DM00403500/files/DM00403500.pdf/jcr:content/translations/en.DM00403500.pdf
J. V. schrieb: > Damit die Anwendung losläuft, muß BOOT0 beim Einschalten auf > Low gehalten werden. Ich halte es für wenig wahrscheinlich, daß alle deine Portpins nur Eingänge sind. Also lege deine I/O Konfiguration eben so, daß du besagten Pin als Ausgang beschaltest. Und für die allererste Zeit nach dem Reset reicht normalerweise ein Widerstand nach GND und ohne einen Kondensator aus. W.S.
Werde den Cube Programmer mal installieren und mit einem ST-Link ausprobieren. Bevor ich den Bootlader über die Option Bytes abstelle, sieht es aber so aus, also ob der Cube Programmer tatsächlich auch den sonst unerwünschten Bootlader benutzen kann. Tatsächlich habe ich auf PA9+10 zufällig eine UART2 Schnittstelle im Projekt. Lt. ST AN2606 Seite 273 sollte das theoretisch funktionieren: file:///tmp/mozilla_jv0/cd00167594-stm32-microcontroller-system-memory-b oot-mode-stmicroelectronics-1.pdf Allerdings leuchtet mir nicht ein, wie der Bootlader zwischen den beiden Konfigurationen PA2/3 und PA8/9 unterscheidet.
Janvi schrieb: > Allerdings leuchtet mir nicht ein, wie der Bootlader zwischen den beiden > Konfigurationen PA2/3 und PA8/9 unterscheidet. Zunächst mal garnicht, eher im Gegenteil. Der lauscht auf fast allen Schnittstellen gleichzeitig und nimmt dann die erste, auf der etwas ankommt. Wenn man sowieso Taster und einen Stecker für ein UART braucht, ist der Bootloader überaus elegant. Dann gehört natürlich einer der Taster an den BOOT-Pin. ABER: der Bootloader schaltet auf vielen Pins Pull-Up oder -Down ein. Wenn die Pins ungünstig belegt sind, wird schon mal unfreiwillig ein Ausgang aktiviert sobald der Bootloader startet. Das betrifft vor allem alle SPI-Pins und bei denen ist es je nach Revision der AN2606 mal ein Pull-Up und mal ein Pull-Down. Ich weiß nicht, ob das bei einer bestimmten Chip-Revision passiert ist, oder ob es "nur" ein Druckfehler in der AN2606 war. Die USB-Schnittstelle braucht einen 1k5 Pull-Up am DP-Pin (PA12). Der Bootloader schaltet auch den ein und dann hilft auch kein externer Pull-Down mehr. Noch besser: das passiert auch bei Typen, die offiziell kein USB haben, in denen aber ein größerer Chip mit USB steckt. Danke, STM.
Bauform B. schrieb: > Die USB-Schnittstelle braucht einen 1k5 Pull-Up am DP-Pin (PA12). Soweit mir bekannt ist, haben die STM32L0 einen internen Pull-Up an der USB Schnittstelle. Ich weiß aber nicht, ob der Bootloader diesen aktiviert. Weist du es genauer? Der STM32L011 vom TO hat kein USB.
Stefan ⛄ F. schrieb: > Soweit mir bekannt ist, haben die STM32L0 einen internen Pull-Up an der > USB Schnittstelle. Ich weiß aber nicht, ob der Bootloader diesen > aktiviert. Weist du es genauer? Laut AN2606 ist der 1k5 überall drin, außer bei den F301, F302, F373 und allen L1. Vom STM32L451RET weiß ich genau, dass der Bootloader den einschaltet weil der Scherz ein neues Layout gekostet hat. > Der STM32L011 vom TO hat kein USB. Ja, der wohl wirklich nicht. Der L451 hat auf dem Papier auch kein USB, aber da ist der gleiche Chip drin wie im L452 und L462. Und die haben USB.
>> Der STM32L011 vom TO hat kein USB. Bauform B. schrieb: > Ja, der wohl wirklich nicht. Der L451 hat auf dem Papier auch kein USB, > aber da ist der gleiche Chip drin wie im L452 und L462. Und die haben > USB. In Kombination mit Bootloader ist das gemein. Denn der schaltet einen "USB Pull-Up" ein, mit dem niemand rechnet, weil der Chip offiziell kein USB hat. Da war doch auch sowas ähnliches beim STM32F101. Ich habe ST-Link Nachbauten mit STM32F101 gesehen, wo ich erst dachte "das kann doch nicht funktionieren, die haben kein USB". Geht aber doch.
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.