我的休眠处理如下: //第六部分:休眠处理 //进入SLEEP_MODE //关中断: //USART_ITConfig(USART1, USART_IT_TXE, DISABLE); USART1->CR1 &= ~(0x00000080); //关闭发送中断 UartSendBusyTmp = UartSendBusy; //USART_ITConfig(USART1, USART_IT_TXE, ENABLE); USART1->CR1 |= (0x00000080); //使能发送中断 //开中断 if((UartSendBusyTmp==1) || (LowPowerEnter==1) ) {//数据发送中,或者 __WFI(); // } else { //进入 STOP_MODE //----------------------------------------- //无线模块休眠控制: #ifdef RF_SLEEP_EN RF_SLEEP_ENTER(); //低电平休眠 #endif #if CPU_TEST==1 //测试RUN、SLEEP 时间分布 GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); #endif //是否需要关闭其他中断? //自身休眠 PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI); //__WFI(); //重新初始化: SYSCLKConfig_STOP(); LowPowerExitSysInit(); //这里不初始化也一样。 //启动ADC ADC_SoftwareStartConvCmd(ADC1, ENABLE); LowPowerEnter = 1; #if CPU_TEST==1 GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET); #endif }
使用__WFI() 功能正常; 但使用PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI); 就异常了,不知道哪个外设,还没找到,不好仿真。 解释一下,上面是因为调试发现问题了,想用小程序测试(就是上面的程序),结果RTC 都唤醒不了, 现在使用如下初始化RTC 后,RTC 唤醒功能正常: RTC_Configuration();
RTC_ClearFlag(RTC_FLAG_SEC); while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET); RTC_SetAlarm(RTC_GetCounter()+ 32768/2/250); RTC_WaitForLastTask();
|