采用RTC报警功能来触发退出停止模式,LED2闪烁3次,共计3秒后退出停止模式。重复试验。。。。。。。。 - //STOPMODE设置初始化
- void STOPMODEG_Config(void)
- {
- EXTI_InitTypeDef EXTI_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOE, GPIO_Pin_2);
- GPIO_SetBits(GPIOC, GPIO_Pin_2);
-
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);
-
- EXTI_InitStructure.EXTI_Line = EXTI_Line2;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- //EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- EXTI_ClearITPendingBit(EXTI_Line17);
- EXTI_InitStructure.EXTI_Line = EXTI_Line17;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- EXTI_Init(&EXTI_InitStructure);
- RTC_Configuration();
-
- GPIO_SetBits(GPIOD, GPIO_Pin_6);
-
- GPIO_ResetBits(GPIOD, GPIO_Pin_3);
- GPIO_ResetBits(GPIOB, GPIO_Pin_5);
- GPIO_ResetBits(GPIOD, GPIO_Pin_6);
- GPIO_ResetBits(GPIOD, GPIO_Pin_3);
- }
- void RTC_Configuration(void)
- {
-
-
- PWR_BackupAccessCmd(ENABLE);
-
- BKP_DeInit();
-
-
- RCC_LSEConfig(RCC_LSE_ON);
-
- while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
- {
- }
-
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
-
- RCC_RTCCLKCmd(ENABLE);
-
-
- RTC_WaitForSynchro();
-
- RTC_SetPrescaler(32767);
-
- RTC_WaitForLastTask();
-
- RTC_ITConfig(RTC_IT_ALR, ENABLE);
-
- RTC_WaitForLastTask();
- }
- void SYSCLKConfig_STOP(void)
- {
-
- RCC_HSEConfig(RCC_HSE_ON);
-
- HSEStartUpStatus = RCC_WaitForHSEStartUp();
- if(HSEStartUpStatus == SUCCESS)
- {
-
- RCC_PLLCmd(ENABLE);
-
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- {
- }
-
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
-
- while(RCC_GetSYSCLKSource() != 0x08)
- {
- }
- }
- }
- void TEST_STOPMODE(void)
- {
-
- Tic_Delay(1500);
-
- RTC_ClearFlag(RTC_FLAG_SEC);
- while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
-
- RTC_SetAlarm(RTC_GetCounter()+ 3);
-
- RTC_WaitForLastTask();
-
- GPIO_SetBits(GPIOD, GPIO_Pin_3);
-
- GPIO_ResetBits(GPIOD, GPIO_Pin_6);
-
- PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
-
-
-
- GPIO_SetBits(GPIOD, GPIO_Pin_6);
-
- SYSCLKConfig_STOP();
-
- GPIO_ResetBits(GPIOD, GPIO_Pin_3);
- }
以上为STOP子程序代码。。。。。。。。在主程序中运行TEST_STOPMODE();即可。
|