Forum: Mikrocontroller und Digitale Elektronik STM32F4 - Runtertakten im Idle Betrieb


von Christian J. (Gast)


Lesenswert?

Hallo,

im K(r)ampf mit dem STM32F4 möchte ich eine Technik nutzen, die ich bei 
PIC und AVR oft gemacht habe, das Runtertakten wenn sich das Programm in 
der Schleife befindet und kein Trigger aktiv ist auf etwas zu reagieren. 
Das spart ne Menge Strom bei Batteriebetrieb.

Der M4 ist nun erheblich komplexer, was sein Clocking System angeht:

http://www.st.com/web/en/resource/technical/document/application_note/DM00039457.pdf

Ist es überhaupt sinnvoll so etwas zu machen? Es muss ja nicht nur der 
Haupttakt geändert werden sondern auch die Bustakte dann direkt mit auf 
"richtige Werte". Ich benutze die USART, daher müssen zb die 
Stndardbadrate passen und ich habe keine Ahnung welche Grenzen zb für 
den Bustakt gelten, bisher nur mit den Standardeinstellungen gearbeitet.

Hta da jeamnd schon mal was gemacht, zb fertige Routinen?

von public (Gast)


Lesenswert?

Hey Cristian,

verwendest du denn die Standard-Lib: 
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1939/PF257901# 
?

Da sollte es doch die entsprechenden Routinen geben den Haupttakt zu 
ändern... Dabei musst du natürlich alle anderen Taktquellen 
berücksichtigen.

beste grüße
public

von Christian J. (Gast)


Lesenswert?

Hi,

ich habe die StdPeriph Libs und noch welche drüber von Tilen Majerle. 
In den Libs ändert man die Freq im Header, da stehen auch die Zahlen für 
die ganzen Register drin. Muss man sich vorher berechnen und dann 
eintragen. Routinen wie Set_clock(100 MHZ) gibt es nicht.

Was ich so sehe ist, dass man sich mit dem Clock Tool von ST so einige 
Freqs herrauspicken kann und diese dann in eine Routine packt, so dass 
zb der HSCK zwar runter geht aber die AHB und APB Clocks durch Anpassung 
ihrer Prescaler gleich bleiben, damit kein Murks entsteht. Wenn man die 
PLL ändert muss sicherlich einiges mehr beachten werden aber soweit bin 
ich noch nicht. Blöd, dass man das alle nicht nachmessen kann...

von Martin K. (martinko)


Lesenswert?

Hi,

leg ihn doch mit __WFI() schlafen.

Gruß Martin

von public (Gast)


Lesenswert?

Hallo,

du kannst dir ja eine definierte frequenz per timer/pwm ausgeben und 
mittels oszi überprüfen, dann den takt runterregeln und den timer 
nachziehen. am ende solltest du dann natürlich wieder bei deiner 
ausgangsfrequenz ankommen...
gibt es nicht sogar einen pin der den internen takt direkt nach außen 
abgibt?

beste grüße
public

von eagle user (Gast)


Lesenswert?

Christian J. schrieb:

> Wenn man die PLL ändert muss sicherlich einiges mehr beachten werden

zum Beispiel hat man dann eine Zeit lang (bis die die PLL eingeschwungen 
ist) einen ziemlich undefinierten, auch höheren, Takt.

> Blöd, dass man das alle nicht nachmessen kann...

Immerhin gibt's die Alternate Function "MCO". Damit kann man diverse 
interne Taktquellen auf einen Ausgangspin schalten.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Christian J. schrieb:
> Hallo,
>
> im K(r)ampf mit dem STM32F4 möchte ich eine Technik nutzen, die ich bei
> PIC und AVR oft gemacht habe, das Runtertakten wenn sich das Programm in
> der Schleife befindet und kein Trigger aktiv ist auf etwas zu reagieren.
> Das spart ne Menge Strom bei Batteriebetrieb.
>
Wie lange sind den die Zeiten der Aktivitaet un des Schlafens?

> Der M4 ist nun erheblich komplexer, was sein Clocking System angeht:
>
> 
http://www.st.com/web/en/resource/technical/document/application_note/DM00039457.pdf
>
> Ist es überhaupt sinnvoll so etwas zu machen? Es muss ja nicht nur der
> Haupttakt geändert werden sondern auch die Bustakte dann direkt mit auf
> "richtige Werte". Ich benutze die USART, daher müssen zb die
> Stndardbadrate passen und ich habe keine Ahnung welche Grenzen zb für
> den Bustakt gelten, bisher nur mit den Standardeinstellungen gearbeitet.
>
> Hat da jeamnd schon mal was gemacht, zb fertige Routinen?

Ich habe das gemacht, um mit dem F411 einen batteriebetriebenen 
Datenlogger fuer One-Wire zu machen. Ich benutze allerdings den RTC. 
Wenn der uC nichts zu tun hat, legt er sich schlafen, allerdings mit 
aktivierten RTC Ereignis. Mit dem RTC Ereigniss geht es dann weiter. Im 
Mittel brauche ich weniger als ein Milliampere. Inzwischen wuerde ich 
das mit dem STM32L476 machen, der mit seinem MSI noch einfacher zu 
handbaben ist.

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.