STM32F4 Clocks

OP #2721195
Lesenswert?

Hallo,

also ich hab mal ein paar Fragen zu den Clocks der STM32F4.
Nach dem Reset wird der Interne Takt verwendet also alle Clocks = 16MHz?
Was passiert wenn ich ausversehen die aktuelle Clock-Source abschalte? 
Läuft er dann wieder mit internem Takt weiter (ClockException-Handler?)
Was ist HCLK?

Wäre sehr hilfreich wenn ihr mir die Fragen beantworten könntet.

Moritz
#2721204
Lesenswert?

Moritz M. schrieb:
> Nach dem Reset wird der Interne Takt verwendet also alle Clocks = 16MHz?

Nach dem Reset ist der HSI aktiv (High Speed, intern).

> Was passiert wenn ich ausversehen die aktuelle Clock-Source abschalte?
> Läuft er dann wieder mit internem Takt weiter (ClockException-Handler?)

So ist der Plan. Das habe ich zwar noch nicht getestet, aber für solche 
Fälle gibt es diese Exception. Ob sie auftritt, wenn du es 
softwareseitig umschaltest, oder nur wenn der Quarz ausfällt, weiss ich 
gerade nicht.

> Was ist HCLK?

High speed clock
HCLK ist dein Systemtakt, der aus HSI, HSE, PLL... gewonnen wird, je 
nach Konfiguration.

> Wäre sehr hilfreich wenn ihr mir die Fragen beantworten könntet.

Kein Problem.
#2721421
Lesenswert?

Hi,

im "Reference Manual" ab Seite 84 sind die clocks beschrieben. Auf Seite 
85 ist der "Clock Tree" auch graphisch dargestellt. Anhand dessen kann 
man die clocks des Controllers finde ich ganz gut verstehen (Bei mir 
wars jedenfalls so, allderdings beim STM32F1).

lg much

edit: hier der link zum manual: 
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf
OP #2721558
Lesenswert?

Hallo,

also ich hab einfach mal ein bisschen rumprobiert. Anscheinend geht es 
nicht, dass man einfach den Takt abdreht. Ich hab es einfach mit 
folgendem Programm mal getestet:
1
#include "stm32f4xx.h"
2

3
int main(void)
4
{
5
  SystemInit();
6
//Hier läuft der Controller mit 168MHz durch PLL und externem HSE-Quarz von 8MHz
7

8
  RCC_HSEConfig(RCC_HSE_OFF);
9

10
  SystemCoreClockUpdate();
11

12
  RCC_ClocksTypeDef RCC_Clocks;
13
  RCC_GetClocksFreq(&RCC_Clocks);
14
//Hier sind es immer noch 168MHz
15
    while(1)
16
    {
17
    }
18
}
Gast #2721566
Lesenswert?

>also ich hab einfach mal ein bisschen rumprobiert. Anscheinend geht es
>nicht, dass man einfach den Takt abdreht. Ich hab es einfach mit
>folgendem Programm mal getestet:

Schliess doch mal den Quarz kurz;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren