Forum: Mikrocontroller und Digitale Elektronik STM32 Startup Zeit


von J. V. (janvi)


Lesenswert?

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?

von Kevin M. (arduinolover)


Lesenswert?

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
von J. V. (janvi)


Lesenswert?

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
von temp (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

Kann du nicht einfach einen anderen Widerstand verwenden?
Zum Beispiel 10µF und 100kΩ.

von Frank K. (fchk)


Lesenswert?

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

von Bauform B. (bauformb)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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!

von Janvi (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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

von W.S. (Gast)


Lesenswert?

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.

von Janvi (Gast)


Lesenswert?

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.

von Bauform B. (bauformb)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Bauform B. (bauformb)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

>> 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
Noch kein Account? Hier anmelden.