非常感谢香版主和ijk的及时回复! 系统时钟是用外部8MHz晶振通过PLL倍频到16MHz,我提到的系统稳定是指系统从停止模式唤醒后到恢复系统时钟为16HMz,系统正常运行. 因为之前从停止模式唤醒后发现系统时钟一直都是8MHz左右(MCO管脚输出时钟),并不是自己想得到的16MHz.参考了例程,发现STOP例程主函数的while(1)循环程序中加有一个1.5s的延时,然后在自己的程序中也加一个十几个ms(香版提到的十几个ms就是在这里,以SysTick 1ms为时基)的延时后发现系统时钟的输出就为16MHz了.怀疑唤醒后到系统稳定不应该要这么久,所以才上来找大家帮忙. ______________________________________________________ //系统从停止模式唤醒后RCC的配置程序 void SYSCLKConfig_STOP(void) { /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS) { /* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } } } -----------------------------------------------------------------
----------------------------------------------------------------- //例程中的while(1)程序 while (1) { /* Insert 1.5 second delay */ Delay(1500);//唤醒之后的延时!!
/* Wait till RTC Second event occurs */ RTC_ClearFlag(RTC_FLAG_SEC); while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
/* Alarm in 3 second */ RTC_SetAlarm(RTC_GetCounter()+ 3); /* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask();
/* Turn off led connected to GPIO_LED Pin6 */ GPIO_ResetBits(GPIO_LED, GPIO_Pin_6);
/* Request to enter STOP mode with regulator in low power mode*/ PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); /* At this stage the system has resumed from STOP mode /* Turn on led connected to GPIO_LED Pin6 */ GPIO_SetBits(GPIO_LED, GPIO_Pin_6);
/* Configures system clock after wake-up from STOP: enable HSE, PLL and select PLL as system clock source (HSE and PLL are disabled in STOP mode) */ SYSCLKConfig_STOP(); } }
|