STM8L Active-halt模式下的低功耗除錯
此模式下的低功耗與halt模式下的低功耗差不多,但Active-halt模式下多了個喚醒,而halt模式下是深睡,主頻外設什麼的全部都關掉了;Active-halt模式下,一樣的首先要將沒用到的GPIO全部輸出低,其它用到的按要求配置即可,這個低功耗主要的就是GPIO的配置狀態,及外設的功耗,其實也很容易就完成。還有最重要的一點,PWR_UltraLowPowerCmd(ENABLE);//超低功耗這句必須得有,不然不會到超低功耗。
void RTC_Config(void)
{
//CLK_LSEConfig(CLK_LSE_ON);
CLK_LSICmd(ENABLE);//使能LSI
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);//RTC時鐘源LSI,1分頻=38K
while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);//等待LSI就緒
RTC_WakeUpCmd(DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);//RTC時鐘門控使能
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);//38K/16=2.375k=0.421ms
RTC_ITConfig(RTC_IT_WUT, ENABLE);//開啟中斷
RTC_SetWakeUpCounter(2375*5);//2375*0,421=1S左右
//ITC_SetSoftwarePriority(RTC_CSSLSE_IRQn, ITC_PriorityLevel_3);//優先順序
enableInterrupts();
}
int main( void )
{
asm("sim"); //全域性中斷關閉
// CLK_Config();
PWR_FastWakeUpCmd(ENABLE); //快速喚醒使能
RTC_Config();
GPIOInit(); //IO初始化
asm("rim"); //全域性中斷開啟
PWR_UltraLowPowerCmd(ENABLE);//超低功耗
RTC_ITConfig(RTC_IT_WUT, ENABLE);//喚醒定時器中斷使能
RTC_WakeUpCmd(ENABLE);//RTC喚醒使能
while(1)
{
halt();
}
}
實測Active-halt睡眠模式 時為1.0uA,接近理論的0.9-2.1uA,