|
停機狀態(無喚醒)
1. PCB僅焊接MCU,電源3.3V,復位電容(10nF)和一個退偶電容(0.1uF), 程序中將所有GPIO確定輸出低電平,主函數中直接halt(),電流約 1.730uA
2. 在1的基礎上,增加一條語句,PWR_UltraLowPowerCmd(ENABLE),或者 PWR->CSR2 = 0x2,再執行halt,電流下降至最低,0.400uA,達到官方指標
3. 在實際產品上的測試(電路上增加了LCD,LSE晶振等),GPIO確定電平,超低功耗開啟,停機狀態 halt(),電流約 0.38uA
4. 在3的基礎上,開啟RTC日歷,電流約 1.3uA
5. 初始化并開啟LCD(未顯示),最低電流約 2.25uA (LCD顯示參數: 死區時間 7, 持續周期 0, HD=0,LCD外部電源)
6. LCD正常工作,電流約 5.95uA (LCD顯示參數: 死去時間 3, 持續周期 5, HD=0,LCD外部電源),顯示效果均衡,LCD電流與LCD玻璃相關
7. 在6的基礎上,HD=1 電流約 18uA
低功耗運行狀態 1. 將主時鐘切換為 LSI,所有GPIO確定電平,開超低功耗,關RTC、LCD、LSE等,主函數執行 while(1), 電流約 95uA
2. 在1的基礎上,關電壓調節器(默認開啟),電流約 3.75uA; 達到標稱電流值。
3. 在2的基礎上,將主時鐘切換為 LSE,電流約為 4.32uA
4. 在3的基礎上,開啟RTC,電流約為 4.59uA
5. 在4的基礎上,開啟LCD(不顯示),電流約為 8.8uA,LCD顯示,電流約為 9.25uA
正常工作狀態
1. PCB僅焊接MCU,電源3.3V,復位電容(10nF)和一個退偶電容(0.1uF),程序中將所有GPIO確定輸出低電平
2. 在1的基礎上,主函數直接執行 while(1),功耗在 930~950uA 波動 (默認2MHz)
3. 在2的基礎上,while(1) 中加入5個 nop(),功耗降低 200uA(即在730~750uA波動)
4. 在3的基礎上,將時鐘配置位16MHz,功耗約為 3.7mA
5. 在4的基礎上,在while(1)中加入 wfi()/wfe(),功耗約為 720uA
6. 在5的基礎上,將時鐘配置位1MHz,功耗約為 325uA
說明: 對于 stm8l 這類低功耗芯片,多數時候應該工作在停止或者等待狀態,全速運行功耗意義不大,以下兩個實際工作模擬
1. 在一般定時顯示程序中(主函數中延時500ms刷新顯示),16MHz時鐘,延時函數使用wfe功耗約1mA, 使用while(flag)功耗約4.5mA
2. 在實際低功耗項目中,RTC和LCD一直工作,CPU脈沖工作,RTC約500ms喚醒一次,刷新顯示,其電池壽命主要取決于LCD顯示效果,正常一般可做到6uA,顯示均衡
3. 以上測試所用的LCD均為4*34段,如果更小的LCD,可能功耗更小
//******************************************************************************************//
其次,我的那個問題也解決了,現在RTC和LCD都能正常工作了,解決方法如下:
軟件上:1、使能RTC,日期初始化,這邊RTC選擇的時鐘是LSE
2、切換時鐘(HSI-->LSE)切換時鐘程序:
//====================================================================//
// 實現功能:時鐘切換:HSE-->LSE
// 參 數:無
// 返 回 值:無
//====================================================================//
void HSE_TO_LSE(void)
{
CLK_LSEConfig(CLK_LSE_ON); //目標CLK 先開啟
while (((CLK->ECKCR)& 0x08)!=0x08); //等待目標CLK穩定,f=32768Hz
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //設定目標 CLK的分頻參數
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSE); //設定此CLK 為切換目標CLK
CLK_SYSCLKSourceSwitchCmd(ENABLE); //開始CLK 切換
CLK->SWCR |=0X01; //使能切換中斷
while (((CLK->SWCR)& 0x01)==0x01); //等待切換后的CLK穩定
CLK->SWCR &=0X00;
CLK_HSICmd(DISABLE); //關閉原先的 CLK source
}
3、LCD初始化,輸入想要的數據,比如(20140214)
4、HALT模式設置,設置如下
void Halt_Init(void)//設置低功耗
{
CLK_HaltConfig(CLK_Halt_FastWakeup,ENABLE);//快速喚醒
PWR->CSR2 |= 0x06;//ULP=1,FWU=1 //與上句一樣
GPIO_LowPower_Config();//配置GPIO口,這邊把不需要的IO口都設置為低電平推挽輸出,以降低功耗
}
5、halt();//進入低功耗模式
硬件上:
1、stm8l152的芯片引腳中的VLCD引腳最好接高電平并且再接一個電容后接地,如圖
其中電容為4.7UF。(我之前一直沒有接VCC,所以電平一直是低電平,雖然有信號,但是都不能點亮LCD)
2、選擇好點的32768HZ的晶振,我后來選擇的是MC306型號的晶振,之前選的晶振都無*常起振。
|
|