void RCC_Init(void)
{
ErrorStatus HSEStartUpStatus; /* 枚举型变量 */
RCC_DeInit(); /*重置RCC */
RCC_HSEConfig(RCC_HSE_ON); /* HSE使能 */
HSEStartUpStatus=RCC_WaitForHSEStartUp(); /* 等待HSE起振 */
if(HSEStartUpStatus==SUCCESS) /* 判断HSE起振成功 */
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 设置AHB时钟HCLK */
RCC_PCLK1Config(RCC_HCLK_Div2); /* 设置低俗APB1时钟PLCK1*/
RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速APB2时钟PLCK2*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6); /* 6倍频 */
}
else
{
/*do nothing*/
}
RCC_PLLCmd(ENABLE); /* PLL使能 */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET) /* 检查使能标志位 */
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* PLLCLK作为SYSCLK */
while (RCC_GetSYSCLKSource()!=0x08) /* 判断SYSCLK是否设置成功
0x08意思是PLL作为系统时钟 */
{
}
}
void MCO_GPIO_Config(void) /* GPIO配置 */
{
GPIO_InitTypeDef GPIO_InitStruct; /* 结构体定义 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* GPIOA使能 */
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8; /* PA8 */
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; /* 推挽输出 */
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; /* 50MHz*/
GPIO_Init(GPIOA,&GPIO_InitStruct); /*初始化GPIOA */
}
int main(void)
{
RCC_Init();
MCO_GPIO_Config();
RCC_MCOConfig(RCC_MCO_SYSCLK); /* MCO输出SYSCLK */
}
|