1. 程式人生 > >STM8L Active-halt模式下的低功耗除錯

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,