部分程序如下:
/* 1 )喚醒源設置*/
? GPIOA_ModeCfg( GPIO_Pin_3|GPIO_Pin_5, GPIO_ModeIN_PU );
? GPIOA_ITModeCfg( GPIO_Pin_3|GPIO_Pin_5, GPIO_ITMode_FallEdge );? ? ? ? // 下降沿喚醒
? NVIC_EnableIRQ( GPIO_IRQn );
? ?PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE );//喚醒模式GPIO,ALL=全部。USB\ETH\RTC\GPIO\BAT
/* 2)喚醒后系統(tǒng)時鐘設置*/
? ?PWR_UnitModCfg( ENABLE, UNIT_SYS_HSE );? ?// HSE上電
? ?DelayUs((1200)/5);
? ?HSECFG_Current( HSE_RCur_100 );? ? ?// 降為額定電流(低功耗函數中提升了HSE偏置電流)
? ?DelayUs(25/5);? ? ? ? ? ? ? ? ? ? ? // 等待穩(wěn)定 1-5us?
? ?SetSysClock( CLK_SOURCE_HSE_32MHz );
? ?PRINT( "wake.. \n");? ? ??
? ?DelayMs(500);
/* 3)休眠眠設置*/
? static uint16_t eventRunTimes = 0;
? ?if( events & MAIN_EVENT ){
? ? ? ? ?eventRunTimes += runTime;
? ? ? ? ?if(eventRunTimes > 10000){?
? ? ? ? ? ? ?PRINT("Sleep\n");
? ?? ? ?NVIC_EnableIRQ(GPIO_IRQn);
? ? ?DelayMs(1);
? ???eventRunTimes = 0;
? ???LowPower_Sleep(RB_PWR_RAM2K|RB_PWR_RAM14K|RB_PWR_EXTEND );//只保留14+2K SRAM 供電?
? ? ?SetSysClock( CLK_SOURCE_HSI_32MHz );
? ? ?HSECFG_Current( HSE_RCur_100 );? ? ?// 降為額定電流(低功耗函數中提升了HSE偏置電流)?
?}
? ?tmos_start_task( mainTaskID , MAIN_EVENT ,MS1_TO_SYSTEM_TIME(runTime) );??
? ?return events ^ MAIN_EVENT;
}
目前情況是能正常進入休眠狀態(tài)(儀器測只有幾uA),但是中斷喚醒后芯片復位了,我是在CentPeri這個DEMO中做的修改,其他地方沒動,是什么原因導致芯片復位的。