我们来写一个配置HSE时钟的函数
1.使能HSE,等待HSE使能成功
2.进行FALSH的预指令操作
3.设置HCLK,PCLK2,PCLK1比例
4.配置锁相环,选择HSE 1分频
5.使能锁相环,等待PLL稳定
6.选择PLL作为系统时钟
代码:
void HseConfig(uint32_t RCC_PLLMul_x)
{
ErrorStatus result;
// 把RCC 寄存器复位成复位值
RCC_DeInit();
/*使能HSE*/
RCC_HSEConfig(RCC_HSE_ON);
/*等待HSE使能成功*/
result = RCC_WaitForHSEStartUp();
/*如果HSE使能成功*/
if(result == SUCCESS)
{
/*进行FLASH的预指令操作*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
/*设置HCLK,PCLK2,PCLK1比例*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
/*配置锁相环*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_x);
/*使能锁相环*/
RCC_PLLCmd(ENABLE);
// 等待PLL稳定
while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET );
// 选择系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while( RCC_GetSYSCLKSource() != 0x08 );
}
else
{
/* 如果HSE 启动失败,用户可以在这里添加处理错误的代码 */
}
}
在main函数通过传入参数改变频率
int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
HseConfig(RCC_PLLMul_9);
//HSI_SetSysClk( RCC_PLLMul_16 );
//MCO_GPIO_Config();
//RCC_MCOConfig(RCC_MCO_SYSCLK);
//RCC_MCOConfig(RCC_MCO_HSI);
LED_GPIO_Config();
while(1)
{
LED_G(OFF);
Delay(0xFFFFF);
LED_G(ON);
Delay(0xFFFFF);
}
}