Estoy intentando cambiar el reloj central del sistema stm32f407 a 100MHz. Para hacer esto, necesito configurar la fuente del PLL para que sea HSE y configurar el coeficiente del PLL para obtener el valor correcto de SYSCLK.
Aquí hay una captura de pantalla del stmcube que muestra los valores correctos de pll M, N, P, Q.
Aquí está mi función
void rcc_clk_config() // function to configure the rc clk for running on HSE : sysclk at 100MHZ
{
RCC_PLLConfig(RCC_PLLSource_HSE, 4, 200, 4, 4);//sysclck to 100mhz , systick to 12.5 mhz
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div4);
RCC_PCLK2Config(RCC_HCLK_Div2);
do{
RCC_HSEConfig(RCC_HSE_ON);;
}
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY)!=SET);
do{
RCC_PLLCmd(ENABLE);
}
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)!=SET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
SystemCoreClockUpdate();
}
En la sesión de depuración obtengo SystemCoreClock = 57.600.000.
Editar: funciona ahora, aquí está el nuevo código
{
RCC_DeInit();
do{
RCC_HSEConfig(RCC_HSE_ON);
}
while (!RCC_WaitForHSEStartUp());
RCC_PLLConfig(RCC_PLLSource_HSE, 4, 200, 4, 4);//100MHZ
do{
RCC_PLLCmd(ENABLE);
}
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)!=SET);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div4);
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
SystemCoreClockUpdate();
}