123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #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);
- KEYBOARD_BACKLIGHT_LOW;
- SpeakerDisable();MicDisable();
- LCD_BL_LOW;
- MODEM_RESET_HIGH;
- MODEM_PWRKEY_LOW;
- GPS_PWREN_LOW;
- //GetVbat();
- // SysTick->CTRL = 0x00;//?????
- // SysTick->VAL = 0x00;//??val,?????
- //
- IWDG_Configuration(3000);//////////////
- //DBGMCU_Config(DBGMCU_STOP, ENABLE);
- ENTERSTOPMODE:
- //设置闹铃时间
- dev_rtc_setAlarm(15);
- // 进入停机模式
- printf("time go go step1\r\n");
- EXTI_ClearITPendingBit(EXTI_Line17); // 清//EXTI_Line9 |
- //printf("Vbat==========%d\r\n",GetOneceVbat());
- ADC_Cmd (ADC1,DISABLE);
- 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();
- SystemInit();
- ADCInit();
- ADC_Cmd (ADC1,ENABLE);
- if(GetOneceVbat()>77){ // 77--345V 由于从停机模式醒来,测试ADC不准 只能打印知晓值。
- printf("Wake Up\r\n");
- while(1);
- }
- goto ENTERSTOPMODE;
-
- }
- }
- #endif
- void dev_rtc_setAlarm(int AlarmValue)
- {
- RTC_ITConfig(RTC_IT_ALR, ENABLE);
- /* Clear the RTC SEC flag */
- RTC_ClearFlag(RTC_FLAG_SEC);
- /* Wait clear RTC flag success */
- 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;
- }
|