主程序:int main() { HSE_SetSysClk(RCC_PLLMul_9); //用HSE配置,sysclk MCO_GPIO_Config(); //MCO端口配置 PA0 RCC_MCOConfig(RCC_MCO_SYSCLK); //MCO_信号选择SYSCLK LED_GPIO_Config(); //HSI_SetSysClk(RCC_PLLMul_16); while(1) { LED_G(OFF); Delay(0x22222); LED_G(ON); Delay(0x22222); } } MCO_GPIO配置程序: void MCO_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); } void HSE_SetSysClk(uint32_t RCC_PLLMul_x) { ErrorStatus HSEStatus; RCC_DeInit(); //RCC Default Init. RCC_HSEConfig(RCC_HSE_ON); //使能HSE HSEStatus = RCC_WaitForHSEStartUp(); if(HSEStatus == SUCCESS ) { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能预取指 FLASH_SetLatency(FLASH_Latency_2); //设置2个等待周期 RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置3个分频因子 RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x); //PLLCLK=HSE * RCC_PLLMul_x RCC_PLLCmd(ENABLE); //使能PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL稳定 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择系统时钟为PLLCLK while(RCC_GetSYSCLKSource()!= 0x08); //等待PLL切换为系统时钟。 } else { //启动失败 } }
|