部分程序如下:
/* 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)唤醒后系统时钟设置*/
PWR_UnitModCfg( ENABLE, UNIT_SYS_HSE ); // HSE上电
DelayUs((1200)/5);
HSECFG_Current( HSE_RCur_100 ); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
DelayUs(25/5); // 等待稳定 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;
}
目前情况是能正常进入休眠状态(仪器测只有几uA),但是中断唤醒后芯片复位了,我是在CentPeri这个DEMO中做的修改,其他地方没动,是什么原因导致芯片复位的。