1.
cfg.WakeUpTime = WAKE_UP_RTC_MAX_TIME;
cfg.sleepCB = CH57X_LowPower; // 启用睡眠
这个WAKE_UP_RTC_MAX_TIME是不是作为CH57X_LowPower()函数的参数传入了?还是在协议栈中做了别的处理
2.
u32 CH57X_LowPower( u32 time )
{
#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)
u32 tmp, irq_status;
SYS_DisableAllIrq( &irq_status );
tmp = RTC_GetCycle32k();
if ( ( time < tmp ) || ( ( time - tmp ) < 30 ) )
{ // 检测睡眠的最短时间
SYS_RecoverIrq( irq_status );
return 2;
}
RTC_SetTignTime( time );
SYS_RecoverIrq( irq_status );
#if( DEBUG == Debug_UART1 ) // 使用其他串口输出打印信息需要修改这行代码
while( ( R8_UART1_LSR & RB_LSR_TX_ALL_EMP ) == 0 )
__nop();
#endif
// LOW POWER-sleep模式
if ( !RTCTigFlag )
{
LowPower_Sleep( RB_PWR_RAM2K | RB_PWR_RAM16K | RB_PWR_EXTEND );
#if (defined (DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
PWR_DCDCCfg( ENABLE );
#endif
time += WAKE_UP_RTC_MAX_TIME;
if( time > 0xA8C00000 ) time -= 0xA8C00000;
RTC_SetTignTime( time );
LowPower_Idle();
HSECFG_Current( HSE_RCur_100 ); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
}
else
{
return 3;
}
#endif
return 0;
}
这个函数中,执行LowPower_Sleep()进入睡眠,后边 LowPower_Idle()函数是做什么用的?