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