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