Forum: Mikrocontroller und Digitale Elektronik Frage zu STM32 Clock


von STLover (Gast)


Lesenswert?

Hallo zusammen,

ich beginne mich gerade in den STM32 einzuarbeiten. Kurze und bündige 
Frage hierzu wie schafft man es auf eine Taktfrequenz von den 168MHz des 
STM32F429 Disovery zu kommen? Soweit ich es richtig verstanden habe kann 
ich dazu 3 verschiedene Taktgeber benutzen. Nehmen wir mal an HSI (8MHZ) 
und PLL, wie sieht derer beiden zusammenspiel aus um auf die 168MHz zu 
kommen ?

Beste Grüße

von Justus S. (jussa)


Lesenswert?

STLover schrieb:
> Nehmen wir mal an HSI (8MHZ)

HSI sollte aber 16 MHz sein

und sonst:

/M = /16
*N = *336
/P = /2

hätte sich aber mit CubeMX sehr schnell selber rausfinden lassen...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Schau dir den Clocktree im RM0090 Reference Manual der STMF4 Serie mal 
genauer an, auf Seite 150/1713 die Fig. 16.
Das Disco F429 hat den 8Mhz Quarz am HSE, so das das vermutlich die 
beste Oszillatorwahl ist. Das HSE Signal teilt sich nun auf die AHB 
(Highspeed), APB (PeripheralClock 1 und 2) und die Master PLL mit den M 
und N Teilern auf. Das ganze wird dann durch den Faktor P geteilt, 
klingt zuerst etwas kompliziert.

Du möchtest 168 Mhz, es kommt also nur die PLLCLK in Frage.
Der Clocktree wird in 'system_stm32f4xx.c' konfiguriert. Die Konstanten 
entsprechen dabei den Teilern in der PLL, also
1
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
2
#define PLL_M      4
3
#define PLL_N      168
4
5
/* SYSCLK = PLL_VCO / PLL_P */
6
#define PLL_P      2
Verfolgen wir das mal: 8Mhz aus dem Quarz werden zuerst durch M=4 
geteilt, am Eingang der PLL stehen also 2MHz. Der Faktor N wirkt als 
Multiplikator, also ist die interne PLL Frequenz 2*168 = 336 Mhz. Am 
Ausgang der PLL wird dann durch P geteilt: 336/2 = 168Mhz.

So läuft das für die anderen PLLs auch. Dabei ist zu beachten, das du 
innerhalb der Grenzen des Systems bleibst, das wird auf der folgenden 
Seite im Reference Manual beschrieben. Also nicht mehr als 180Mhz auf 
AHB, nicht mehr als 90Mhz auf APB2 und nicht mehr als 45 Mhz auf APB1.

von STLover (Gast)


Angehängte Dateien:

Lesenswert?

Darauf bin ich auch gerade gekommen :-) Danke. Gehe ich richtig der 
Annahme dass es sich bei /M und /P um Prescaler handelt ? Bei was 
handelt es sich um *N ? Ich weiss ein Teil vom PLL aber wie gesagt ich 
bin gerade dabei mir das wissen anzueignen.

Und noch eine Frage

Wenn ich HSI = 16MHz einstelle

M : /8

N : *336

P : /2

bekomme ich eine SYSCLK von 336 MHz, was augenscheinlich nicht geht da 
rot gekennzeichnet, was mich interessiert warum geht dies im 
theoretischen & praktischen nicht, wie komme ich auf mein Limit ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Matthias S. schrieb:
> Das HSE Signal teilt sich nun auf die AHB
> (Highspeed), APB (PeripheralClock 1 und 2) und die Master PLL mit den M
> und N Teilern auf.

Stimmt hier nicht ganz, du hast die Wahl zwischen HSI, HSE und PLLCLK. 
PLLCLK ist die einzige sinnvolle Wahl.

von STLover (Gast)


Lesenswert?

Stark! Danke Matthias! Aber an welchen Kritieren wähle ich denn meine 
M,N,P Parameter aus ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

STLover schrieb:
> Aber an welchen Kritieren wähle ich denn meine
> M,N,P Parameter aus ?

Du wirst immer von der Taktquelle ausgehen müssen, die du hast, wie z.B. 
beim Disco der 8MHz Quarz. Ab dann heisst es eigentlich 'so schnell wie 
möglich und so langsam wie nötig', das heisst, du musst dich innerhalb 
der von der Hardware gesetzten Grenzen bewegen.
Das heisst z.B., das du nicht mehr als 180Mhz SYSCLK benutzen darfst und 
das die interne Master PLL nicht höher als wie im jeweiligen Datenblatt 
beschrieben, getaktet werden darf.

Praktisch sind die 168Mhz, weil sich daraus alle anderen Clocks mit dem 
maximal möglichen Frequenzen ableiten lassen.

: Bearbeitet durch User
von STLover (Gast)


Lesenswert?

Super! Und die M,N & P Parameter wähle ich so aus damit ich diese 
Grenzwerte einhalte ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

STLover schrieb:
> Wenn ich HSI = 16MHz einstelle
>
> M : /8
>
> N : *336
>
> P : /2
>
> bekomme ich eine SYSCLK von 336 MHz, was augenscheinlich nicht geht da
> rot gekennzeichnet, was mich interessiert warum geht dies im
> theoretischen & praktischen nicht, wie komme ich auf mein Limit ?

Genau, SYSCLK darf eben maximal 180Mhz sein. Du setzt also entweder M = 
16 oder P = 4, wobei P = 4 die bessere Wahl ist, weil ein 2Mhz Takt 
weniger jittert als ein 1 Mhz Takt - das ist vor allem für die I2S Clock 
wichtig, die dich im Moment noch nicht so interessiert. Nimm aber immer 
besser den HSE als den HSI Oszillator, denn der Quarz ist ja schon auf 
dem Board und wesentlich stabiler als der HSI RC Oszillator.

: Bearbeitet durch User
von STLover (Gast)


Lesenswert?

Jup, wieder mal was gelernt, nochmals danke. Behalte mir das jittern im 
Hinterkopf.

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.