Forum: Mikrocontroller und Digitale Elektronik STM32: Umsteigerfragen


von Max G. (l0wside) Benutzerseite


Lesenswert?

Bisher habe ich meist mit MSP430 gearbeitet, aber die Preise für den 
MSP430F5310 sind inzwischen derart hoch, dass ich mich nach Alternativen 
umgeschaut habe und nun beim STM32L051 gelandet bin (Cortex M0+, 
Low-Power, 64 kB Flash).

Bevor ich nun die erste LP zum Fertiger schicke, ein paar Fragen. Wenn 
einige ein bisschen seltsam wirken, liegt das ggf. daran, dass ich von 
einer anderen µC-Familie komme. Und ja, RTFM, aber einige Punkte habe 
ich schlicht noch nicht gefunden.
- Sehe ich es richtig, dass der STM32L0 nur eine Clock hat, von der 
alles andere (auch die Peripherie-Clocks) abgeleitet werden?
- Der STM32L051 in QFN32 hat den LPUART nicht nach außen geführt. Aus 
der Beschreibung von LPUART und USART bin ich nicht recht schlau 
geworden: kann ich bei Beginn einer UART-Übertragung aus dem 
Low-Power-Sleep aufwachen, oder geht das nur aus dem "normalen" Sleep?
- Kann ich mit einer steigenden oder fallenden Flanke an jedem 
beliebigen GPIO einen Interrupt auslösen, oder ist das auf einzelne 
GPIOs begrenzt?
- Kann der Interrupt nur auf steigende oder fallende Flanke auslösen 
oder auf beide?
- Mit dem MSP430 kann ich aus einem 32kHz-Quarz über eine PLL eine der 
drei Clocks hochskalieren und diese dann über einen Pin (ohne Timer) 
nach außen geben. Geht etwas Ähnliches mit dem STM32 auch?
- Spricht etwas dagegen, statt StdPeriphLib oder gar Cube zu verwenden, 
einfach auf Basis des Reference Manuals direkt die Register zu 
manipulieren? So kenne ich es vom MSP430, und was ich über die 
ST-Libraries gelesen habe, war alles andere als freundlich.

Max

von hp-freund (Gast)


Lesenswert?

So ziemlich alle deine Fragen werden beantwortet wenn Du dir STM32CubeMX 
etwas genauer ansiehst.
Alles schön graphisch dargestellt für den jeweiligen µC.

Auch wenn Du HAL nicht nutzen möchtest ist das die z.Z. beste Vorlage 
bzw. Lerngrundlage. Wenn Du in die Funktionen des erzeugten Codes gehst 
kommst Du bis auf die Registerebne.

Dazu noch ein Nucleo Board, dann sollte der Umstieg recht komfortabel 
sein.

von TriHexagon (Gast)


Lesenswert?

Max G. schrieb:
> - Spricht etwas dagegen, statt StdPeriphLib oder gar Cube zu verwenden,
> einfach auf Basis des Reference Manuals direkt die Register zu
> manipulieren? So kenne ich es vom MSP430, und was ich über die
> ST-Libraries gelesen habe, war alles andere als freundlich.

Nein, spricht nichts dagegen. Mach ich auch.

von Ecki K. (eck)


Lesenswert?

Max G. schrieb:
> - Sehe ich es richtig, dass der STM32L0 nur eine Clock hat, von der
> alles andere (auch die Peripherie-Clocks) abgeleitet werden?

Fast, aber der clock tree von den STM32Lx ist leider ziemlich komplex. 
Im Grunde gibt es vier unterschiedliche Clock-Quellen, aus denen dann 
die System Clock erzeugt wird. Die System Clock ist zwar die wichtigste 
Clock, aber die low power peripherals können anders gespeist werden.

> - Der STM32L051 in QFN32 hat den LPUART nicht nach außen geführt. Aus
> der Beschreibung von LPUART und USART bin ich nicht recht schlau
> geworden: kann ich bei Beginn einer UART-Übertragung aus dem
> Low-Power-Sleep aufwachen, oder geht das nur aus dem "normalen" Sleep?

Ja, denn low power sleep ist wie normaler sleep, nur ist der Regulator 
im Stromsparmodus und braucht länger um hochzufahren.

> - Kann ich mit einer steigenden oder fallenden Flanke an jedem
> beliebigen GPIO einen Interrupt auslösen, oder ist das auf einzelne
> GPIOs begrenzt?

Gehen alle, nur wird ein IRQ-Handler zwischen den gleichen Pins auf 
unterschiedliche Ports geteilt, da muss man im IRQ-Handler einfach 
abfragen welcher Pin denn den IRQ ausgelöst hat.

> - Kann der Interrupt nur auf steigende oder fallende Flanke auslösen
> oder auf beide?

Beides geht.

> - Mit dem MSP430 kann ich aus einem 32kHz-Quarz über eine PLL eine der
> drei Clocks hochskalieren und diese dann über einen Pin (ohne Timer)
> nach außen geben. Geht etwas Ähnliches mit dem STM32 auch?

Nicht direkt... Es gibt den MSI, der kann solche niedrigen Frequenzen 
(bis ~4MHz), ist aber ungenau (ist per SW trimmbar).

von Max G. (l0wside) Benutzerseite


Lesenswert?

Vielen Dank an alle, dann schaue ich mal, ob ich das so zum Laufen 
bringe.

Max

von Mehmet K. (mkmk)


Lesenswert?

Max G. schrieb:
> Spricht etwas dagegen, statt StdPeriphLib oder gar Cube zu verwenden

Für den STM32L0xx gibt es (leider) kein StdPeriphLib. Wer (wie ich) sich 
mit dem Cube nicht anfreuden kann, ist gezwungen, direkt auf die 
Registerebene herabzusteigen.
Um die Einstiegsschwelle nicht ganz so hoch anzusetzen, hat ST eine 
Sammlung von Snippets herausgegeben. Z.Zt. vers. 1.2.0
http://www.st.com/web/en/catalog/tools/PF260788#

Noch eine persönliche Meinung zu STM32L0xx: würde ich jetzt nicht als 
Einstiegsmodell empfehlen.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Mehmet K. schrieb:
> Um die Einstiegsschwelle nicht ganz so hoch anzusetzen, hat ST eine
> Sammlung von Snippets herausgegeben. Z.Zt. vers. 1.2.0
> http://www.st.com/web/en/catalog/tools/PF260788#

Cool, danke für den Tipp!

Max

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.