| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #include "includes.h"
- //进入低功耗会死机,暂时使用以下操作模拟。20mA~30mA左右
- unsigned char g_bRTCAlarm=0;
- #if 1
- void Sleeping(void)
- {
- SlwTrace(INF, "Sleeping",1);
- MODEM_LED1_LOW;MODEM_LED2_LOW;
- KEYBOARD_BACKLIGHT_LOW;
- SpeakerDisable();MicDisable();
- LCD_BL_LOW;
- MODEM_RESET_HIGH;
- MODEM_PWRKEY_LOW;
- GPS_PWREN_LOW;
- IWDG_Configuration(3000);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, DISABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3, DISABLE);
- ADC_Cmd (ADC1,DISABLE);//使能或者失能指定的ADC
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, DISABLE);
- os_tsk_delete(idModemUartTask);
- os_tsk_delete(idModemTask);
- os_tsk_delete(idTTSTask);
- while(1)
- {
- os_dly_wait(1000);
- IWDG_ReloadCounter();
- }
- }
- #else
- void Sleeping(void){
-
- SlwTrace(INF, "Sleeping",1);
- MODEM_PWRKEY_LOW;
- GPS_PWREN_LOW;
- // SysTick->CTRL = 0x00;//?????
- // SysTick->VAL = 0x00;//??val,?????
- //
- IWDG_ReloadCounter();
-
- ////
- //// ENTERSTOPMODE:
- //// //设置闹铃时间
- //// dev_rtc_setAlarm(10);
- ////
- //// // 进入停机模式
- EXTI_ClearITPendingBit(EXTI_Line9 | EXTI_Line17 ); // 清
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外设时钟
- PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能
- PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
-
- //// // RTC时间到达
- //// if(dev_rtc_isAlarm())
- //// {
- //// //
- //// IWDG_ReloadCounter();
- //// //
- //// goto ENTERSTOPMODE;
- //// }
- }
- #endif
- void dev_rtc_setAlarm(int AlarmValue)
- {
- /* Clear the RTC SEC flag */
- RTC_ClearFlag(RTC_FLAG_SEC);
- /* Wait clear RTC flag sccess */
- while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
- /* Wait until last write operation on RTC registers has finished */
- RTC_WaitForLastTask();
- /* Sets the RTC alarm value */
- RTC_SetAlarm(RTC_GetCounter() + AlarmValue);
- /* Wait until last write operation on RTC registers has finished */
- RTC_WaitForLastTask();
- }
- unsigned char dev_rtc_isAlarm(void)
- {
- if(g_bRTCAlarm)
- {
- /* Clear the RTC alarm flag */
- g_bRTCAlarm = 0;
- return 1;
- }
- return 0;
- }
|