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