1. 程式人生 > >Stm8L系列微控制器的低功耗

Stm8L系列微控制器的低功耗

Stm8L系列微控制器的低功耗有五種模式:

wait模式

Low power run模式

Low power wait模式

Active-halt with full RTC模式

Halt模式

最低功耗的就是就是halt模式。這裡也主要總結一下如何進入halt模式,進入以後可以通過什麼方式喚醒,以及有很多客戶會關心的如何自動喚醒

Halt模式進入很簡單,執行一條halt指令,呼叫庫函式也就是halt()就行了。但是進入前要注意把所有的中斷掛起標誌給清除掉。要是不清零又恰巧有中斷標誌的時候進入該模式也會被立馬喚醒。進入這種模式,所有的外設全都關閉了,所有時鐘關閉。這時候它自己是醒不過來的,只能靠掐人中(給個外部中斷)或者重新復活(重啟復位)。當然這個在進入halt之前是要把中斷引腳什麼的該配置的給配置好了。

那現在有個問題就是在halt模式下只能通過外部中斷和復位了,我需要它自動醒過來怎麼辦?那就在進入的時候定個鬧鈴了(開啟rtc),到點了就要醒過來。既然開了鬧鈴了它也就不是純halt模式了。這時候也就叫做active-halt模式。Active-halt模式下可以打開個rtc和lcd。這裡要說明一下,在stm8s和stm8l101xx系列裡面有AWU自動喚醒暫存器。

 

  • Halt模式下設定,達到0.4uA

 

I/O口設定,沒有其它外設下,不用的IO口全部拉低輸出,用到的IO口按使用情況設定,GPIO_Mode_In_PU_No_IT,與GPIO_Mode_In_Fu_No_IT,對GPIO的配置,功耗也是有差別的,各位各自去體會吧,哈哈。且主時鐘預設是2MHz。

void GPIOInit(void)

{

      GPIO_TypeDef GPIO_Struct;

 

      GPIO_DeInit(&GPIO_Struct);

      

      GPIO_Init(GPIOB,GPIO_Pin_0  | GPIO_Pin_3|GPIO_Pin_5 | GPIO_Pin_6,GPIO_Mode_Out_PP_Low_Fast);

      GPIO_Init(GPIOB,GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_7,GPIO_Mode_In_PU_No_IT);

      GPIO_Init(GPIOB,GPIO_Pin_4,GPIO_Mode_Out_PP_Low_Fast);

      

      GPIO_Init(GPIOD,GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7 ,GPIO_Mode_Out_PP_Low_Fast);        

      //GPIO_ExternalPullUpConfig(GPIOC,GPIO_Pin_2 | GPIO_Pin_3,ENABLE);

      //GPIO_Init(GPIOD,GPIO_Pin_6 |GPIO_Pin_7 ,GPIO_Mode_Out_PP_High_Fast);        

 

      GPIO_Init(GPIOC,GPIO_Pin_4,GPIO_Mode_In_PU_No_IT); //RF_IRQ

      GPIO_Init(GPIOC,GPIO_Pin_0 | GPIO_Pin_6,GPIO_Mode_Out_PP_High_Fast); //MOSI 備用

      GPIO_Init(GPIOC,GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7,GPIO_Mode_Out_PP_High_Fast);

      

      GPIO_Init(GPIOA,  GPIO_Pin_4|GPIO_Pin_5 |GPIO_Pin_6 , GPIO_Mode_In_PU_No_IT); //KEY

      GPIO_Init(GPIOA,  GPIO_Pin_0|GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3|GPIO_Pin_7 , GPIO_Mode_Out_PP_Low_Fast);

      

      PD_ODR_ODR0=0; //oled_ce      

}

 

int main( void )

{  

   asm("sim");   //全域性中斷關

 

   GPIOInit();   //IO初始化

 

asm("rim");   //全域性中斷開啟

   CLK_DeInit();

   PWR_UltraLowPowerCmd(ENABLE);

    halt();

    /*infinite loop begin*/

while(1);

此設定下STM8L151晶片功耗達到0.4uA,無其它外設的初始化