剛開始進入STOPMode后,整機功耗有 300uA的,此時外圍其他硬件電路電流已經(jīng)可以肯定漏電流在nA級,因此調(diào)試方向在主芯片,經(jīng)過實際測試,都是GPIO配置的問題,比如某個GPIO為中斷輸入,閑置為低電平,而我們配置成了IPU,因此內(nèi)部的40K上拉就會在這里消耗3/40k =75uA,另外將N.C的GPIO配置成Floating Input,也會有一些漏電流,實際測試漏電流不大;另外將STM32F05x直接PIINtoPIN替代STM32100,所以Pin35,36的 PF6,PF7為之前的VCC,GND,因此要相應(yīng)的配置為IPU,IPD,才不會有拉電流/灌電流;外部不使用晶振,因此必須將其配置為IPU/IPD 或者輸出Low,如果配置成Floating,實測消耗200uA+的電流,這個特別注意。另外不需要關(guān)閉不用的外設(shè)的CLK,因為STOPMODE會將內(nèi)部1.8V的core關(guān)閉,因此該步驟不影響功耗。
因此在進入STOPMODE之前,需要做:
1、將N.C的GPIO統(tǒng)一配置為IPU/IPD;
2、檢查一些Signal的輸入Active是High/Low,相應(yīng)進行配置為IPD/IPU,即避免在內(nèi)部上/下拉電阻上消耗電流,而且該電流理論值為VCC/R = 3/40 =75uA;
3、如果外部晶振不使用,必須將GPIO配置為IPU/IPD/PPLow,不允許配置為floating,否則會消耗極大的電流 200uA+;
4*、加入進入STOPMODE前,不允許將PWR的CLK關(guān)閉,這部分牽涉低功耗模式,實際測試關(guān)閉能用,也能喚醒,但是電流會增加10uA+;
5、配置GPIO為輸出時,根據(jù)輸出的常態(tài)選擇上拉/下拉,如閑置輸出為0,則配置為下拉,輸出閑置為1,則配置上拉;
6、另外特別說明的是->從Stopmode喚醒后,系統(tǒng)會自動切換到HSI,如果進入前使用的是外部晶振/PLL(PLL的clksource = HSI/HSE)因此必須調(diào)用System_Init(),對RCC重新初始化,否則喚醒后主頻發(fā)生改變,會影響系統(tǒng);
調(diào)試經(jīng)驗分享:
經(jīng)常在移植新的產(chǎn)品方案時,都會遇到待機電流不能一步到位,需要測試、調(diào)試的過程,在此分享一個土辦法。
1、在調(diào)用EnterStopmode前,將GPIO的所有配置寄存器printf,比對GPIO的初始化表,看是否在進入STOP前,在其他地方對GPIO配置做了改動;
調(diào)試過程告訴我,基本都是在進入stopmode時,其他的GPIO被另外配置錯誤導(dǎo)致;
2、在調(diào)用EnterStopmode前,將GPIO的所有配置全部重新配置一次,也可以快速的檢驗是否是這個環(huán)節(jié)出問題。
具體要點為:
1、所有IO管腳,如果高阻狀態(tài)端口是高電平,就設(shè)成上拉輸入,如果高阻狀態(tài)是低電平,設(shè)成下拉輸入,如果高阻是中間狀態(tài),設(shè)成模擬輸入。這個很多人都提到過,必須的。作為輸出口就免了,待機你想輸出個什么東西,一定要輸,硬件上加上下拉就可以了
2、兩個晶振輸入腳要remap成普通IO!!!使用內(nèi)部晶振。
3、pwr的時鐘要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);這個也相當(dāng)重要
4、關(guān)閉jtag口,并設(shè)成普通IO;
5、注意助焊膏的質(zhì)量!!!注意電路板層之間是否進水!!!!
掌握這幾項要點,再設(shè)中斷什么的都行,整個世界清靜了!!!完全低能耗。
有些誤導(dǎo)的地方,下面2點對于STANDBY模式不是必需的:
2、兩個晶振輸入腳要remap成普通IO!!!使用內(nèi)部晶振。
4、關(guān)閉jtag口,并設(shè)成普通IO;