Warum liefert `RCC_GetClocksFreq` andere Ergebnisse als erwartet?

Ich habe eine STM32F427-MCU mit einem 8-MHz-HSE-Quarz. Ich stelle die Uhr wie folgt ein:

#include <stm32f4xx.h>
#include <stm32f4xx_rcc.h>

void initClocks(void);

void initClocks(void) {
    /*
    HSE: 8 MHz
    PLL: HSE / 8 * 192 => 192 MHz
    SysCLK:  PLL / 2 => 96 MHz
    PrphCLK: PLL / 4 => 48 MHz
    */
    RCC_PLLConfig(RCC_PLLSource_HSE, 8, 192, 2, 4);
    RCC_PLLCmd(ENABLE);

    // Wait
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) continue;

    // Use PLL
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while (RCC_GetSYSCLKSource() != 0x08) continue;

    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK2Config(RCC_SYSCLK_Div1);
    RCC_PCLK1Config(RCC_SYSCLK_Div1);
}

int main(void) {
    RCC_ClocksTypeDef ClksFreq;

    initClocks();
    SystemCoreClockUpdate();

    RCC_GetClocksFreq(&ClksFreq);

    while(1) {}
}

HSE_VALUE ist auf 8000000 definiert

Mein Debugger zeigt, dass SYSCLKin ClksFreq57,6 MHz ist, obwohl ich erwarten würde, dass es 96 MHz sind.

Was vermisse ich?

Off Topic, while(x != y);reicht aber für eine Schleife ohne die continueAnweisung. Ich neige dazu, eine zweite Zeile zu reservieren und die einzurücken ;.
@sherrellbc Ja, ich weiß, dass das continuenicht notwendig ist, aber ich denke, das Hinzufügen macht es ein bisschen einfacher zu lesen, wenn es ein "Verb" gibt.

Antworten (1)

Ich habe es geschafft, mein Problem zu beheben, indem ich am Anfang Folgendes hinzugefügt habe:

RCC_HSEConfig(RCC_HSE_ON);

Ich hatte die HSE nicht gestartet, also wurde der größte Teil der Konfiguration wahrscheinlich einfach ignoriert, da der Kern noch funktionierte.

Als Nebenbemerkung waren auch die Teilungen HCLK, PCLK1und PCLK2falsch (über der Frequenzgrenze). Ich hatte ihnen nicht so viel Aufmerksamkeit geschenkt, als ich versuchte herauszufinden, warum sie SYSCLKnicht richtig eingestellt wurden.

@bitsmack Ich versuche, meine Fragen "aktualisiert" zu halten - wenn ich mich erinnere. Manchmal finde ich einjährige Fragen, auf die keine Antwort markiert ist, wenn ich mein Profil durchgehe :)