STM32F103VCT6低功耗測(cè)試(待機(jī)模式)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
只測(cè)試了待機(jī)模式,待機(jī)模式實(shí)現(xiàn)系統(tǒng)的最低功耗。
原理圖如下,一開(kāi)始全部焊接了,其中S2用來(lái)進(jìn)入待機(jī),S1用來(lái)喚醒
測(cè)試程序?yàn)椋?/p>
#include"stm32f10x.h"#include"system_stm32f10x.h"voidSys_Standby(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外設(shè)時(shí)鐘PWR_WakeUpPinCmd(ENABLE);//使能喚醒管腳功能PWR_EnterSTANDBYMode();//進(jìn)入待機(jī)(standby)模式}//系統(tǒng)進(jìn)入待機(jī)模式voidSys_Enter_Standby(void){RCC_APB2PeriphResetCmd(0X01FC,DISABLE);//復(fù)位所有IO口,屏蔽這條語(yǔ)句也沒(méi)有看到什么影響Sys_Standby();}voidIO_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//PB6上拉輸入,對(duì)應(yīng)按鍵S2GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);}intmain(){IO_Init();while(1){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0){Sys_Enter_Standby();}}}123456789101112131415161718192021222324252627282930313233343536373839
電流的測(cè)量用的是萬(wàn)用表,串聯(lián)在電源的輸入端,也就是說(shuō),實(shí)際測(cè)量的電流值為電路板消耗電流。電機(jī)、喇叭、OLED-0.9寸屏這些外部器件均未接入。
系統(tǒng)時(shí)鐘選擇外部8M晶振,電源為電腦USB口取電,上電后按下S2,進(jìn)入待機(jī)模式,按下S1喚醒。
上電, 正常運(yùn)行電流7.9mA,待機(jī)電流205uA,待機(jī)電流比較大;
取下DS1302芯片,正常運(yùn)行電流7.9mA,待機(jī)電流10.5uA;
再取下DS1302芯片的三個(gè)上拉電阻,和上面一樣,沒(méi)變化;(看來(lái)即便有外部上拉,在待機(jī)模式時(shí)也是不用管的,只是不知道這上拉電阻接到了外圍芯片上對(duì)外圍電路的功耗有怎樣的影響。)
再取下AT24C02芯片模塊,正常電流7.7mA,待機(jī)電流10.5uA;
再取下L9110S電機(jī)驅(qū)動(dòng)芯片,正常電流7.7mA,待機(jī)電流10.5uA,沒(méi)有變化;
再取下SK040G語(yǔ)音芯片,就剩電源和按鍵部分了,正常電流7.6mA,待機(jī)7.4uA。
修改程序,開(kāi)RTC后(選外部32.768k晶振),待機(jī)時(shí)電流為8.6uA。
裝上OLED 0.9寸小128x64液晶屏測(cè)試了下,待機(jī)時(shí)120uA,此時(shí)若取下液晶屏,電流由120uA變到正常待機(jī)的7.4uA。
待機(jī)模式可實(shí)現(xiàn) STM32的最低功耗。該模式是在 CM3 深睡眠模式時(shí)關(guān)閉電壓調(diào)節(jié)器,整個(gè) 1.8V 供電區(qū)域被斷電,PLL、HSI和 HSE振蕩器也被斷電,SRAM和寄存器內(nèi)容丟失,僅備份的寄存器和待機(jī)電路維持供電。
從待機(jī)模式喚醒后的代碼執(zhí)行等同于復(fù)位后的執(zhí)行(采樣啟動(dòng)模式引腳,讀取復(fù)位向量等),電源控制/狀態(tài)寄存器(PWR_CSR)將會(huì)指示內(nèi)核由待機(jī)狀態(tài)退出。
待機(jī)模式下的輸入/輸出端口狀態(tài)
在待機(jī)模式下,所有的I/O引腳處于高阻態(tài),除了以下的引腳:
● 復(fù)位引腳(始終有效)
● 當(dāng)被設(shè)置為防侵入或校準(zhǔn)輸出時(shí)的TAMPER引腳
● 被使能的喚醒引腳
<既然進(jìn)入待機(jī)模式后各IO處于高阻態(tài),那么所謂的IO口進(jìn)待機(jī)前需配置為AIN、或者弱上拉弱下拉模式的,其實(shí)都沒(méi)必要了,但看其他的網(wǎng)絡(luò)文章有說(shuō)需配置的,我也是弱上拉、弱下拉、模擬輸入、浮空輸入都測(cè)試了下,對(duì)于最小系統(tǒng),沒(méi)看到待機(jī)電流有什么變化,也測(cè)試了下開(kāi)串口、SPI口什么的,對(duì)待機(jī)電流都沒(méi)有發(fā)現(xiàn)影響,文檔上“進(jìn)入待機(jī)模式后,只有備份的寄存器和待機(jī)電路維持供電,其他部分沒(méi)有供電”,那自然不會(huì)產(chǎn)生功耗,進(jìn)入待機(jī)模式前就沒(méi)必要配置。對(duì)外圍硬件電路進(jìn)入待機(jī)前根據(jù)情況才看是否有設(shè)置外圍芯片工作模式的必要。主芯片進(jìn)入待機(jī)后,管腳都為高阻態(tài),要看這種狀態(tài)對(duì)外圍芯片電路會(huì)帶來(lái)怎樣的影響,如果不合適就要考慮停止模式,在停止模式下,所有的I/O引腳都保持它們?cè)谶\(yùn)行模式時(shí)的狀態(tài)。>
對(duì)于喚醒管腳PA0(WKUP),在寄存器PWR_CSR中的第8位EWUP位有說(shuō)明:
EWUP:使能WKUP引腳
0: WKUP引腳為通用I/O。 WKUP引腳上的事件不能將CPU從待機(jī)模式喚醒
1:WKUP引腳用于將CPU從待機(jī)模式喚醒,WKUP引腳被強(qiáng)置為輸入下拉的配置(WKUP引腳上的上升沿將系統(tǒng)從待機(jī)模式喚醒)
注:在系統(tǒng)復(fù)位時(shí)清除這一位。(即系統(tǒng)復(fù)位重啟后該位為0)
也就是說(shuō)進(jìn)待機(jī)模式后,WKUP自動(dòng)被設(shè)置為下拉輸入(下拉電阻典型值40K),無(wú)需額外配置端口A時(shí)鐘及PA0管腳功能。
正常運(yùn)行時(shí)IO口的損耗及響應(yīng)配置:
以下為轉(zhuǎn)載http://blog.csdn.net/beep_/article/details/47975227
I/O模塊損耗:
靜態(tài)損耗:
內(nèi)部上下拉電阻損耗:這部分損耗主要取決于內(nèi)部電阻的大小,一般為了降低內(nèi)部電阻損耗常常需要降低電阻兩端電壓,若引腳為低電壓則采用下拉電阻,若引腳為高電壓則采用上拉電阻。
I/O額外損耗:當(dāng)引腳設(shè)為輸入I/O時(shí),用來(lái)區(qū)分電壓高低的斯密特觸發(fā)器電路會(huì)產(chǎn)生一部分消耗,為此可將引腳設(shè)為模擬輸入模式。
動(dòng)態(tài)損耗:對(duì)于懸浮的引腳,由于其電壓不穩(wěn)定會(huì)產(chǎn)生外部電磁干擾和損耗,因此必須把懸浮引腳設(shè)為模擬模式或輸出模式。
引腳電壓的切換會(huì)對(duì)外部和內(nèi)部電容負(fù)載產(chǎn)生動(dòng)態(tài)損耗,其損耗與電壓切換頻率和負(fù)載電容有關(guān)。具體損耗值如下: