¿Por qué 'RCC_GetClocksFreq' devuelve resultados diferentes de los que espero?

1

Tengo un MCU STM32F427 con un cristal HSE de 8MHz. Estoy configurando el reloj de la siguiente manera:

#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 se define como 8000000

Mi depurador muestra que SYSCLK en ClksFreq es 57.6MHz, aunque esperaría que fuera de 96Mhz.

¿Qué me estoy perdiendo?

    
pregunta varesa

1 respuesta

2

Logré solucionar mi problema agregando lo siguiente cerca del principio:

RCC_HSEConfig(RCC_HSE_ON);

No había iniciado el HSE, por lo que la mayoría de la configuración probablemente se ignoró porque el núcleo aún funcionaba.

Como una nota al margen, también las divisiones HCLK , PCLK1 y PCLK2 fueron incorrectas (por encima del límite de frecuencia). No había prestado tanta atención a ellas, ya que traté de averiguar por qué SYSCLK no estaba configurar correctamente.

    
respondido por el varesa

Lea otras preguntas en las etiquetas