STM32 MCU GPIO模式選擇對低功耗的影響

提到MCU低功耗要求,很多人心裏面立即想到的是MCU在stop/standby模式下的功耗表現。選擇超低功耗的MCU,儘量關閉不必要外設和時鐘,增加外圍電路的阻抗相信是大多人普遍的做法。但有時已經把硬體軟體優化得非常完美了,當MCU進入stop時,電流達不到預期的低,或者說沒法做到datasheet所給到的值。其實往往我們忽略了一些細節導致的。
MCU最簡單的GPIO,有可能是我們無法進入超低功耗的問題所在,也是容易被人忽略的。
通常GPIO口有4個模式:
      1. 輸入 Input mode
      2. 輸出 output mode
      3. 連接ADC,作為ADC輸入 Analog mode
      4. 連接其他外設,如TIMER,EXIT等作為輸入和輸出 Alternate function mode


在這裡直接說答案,個人做過以下試驗,GPIO口不管出於輸入或輸出模式,必須要有穩定的電平,而處於浮空狀態的GPIO口是比較耗電的,每個GPIO口處於懸浮狀態,約可增加2~10uA電流,假如所有GPIO口都處於懸浮狀態,那可能增加幾十到幾百uA電流,自然功耗就沒法做下來。
ST早期產品STM32F1/F0系列,GPIO默認狀態就是處於浮空。下圖是F1的GPIO reset狀態


下圖是F0的reset狀態



可以看到,STM32F0和F1,對GPIO的reset狀態都是處於輸入懸浮狀態,這是比較耗電的,需要用戶自己去配置所有GPIO口,將它們配置成輸入上下拉或輸出PP。可能ST也意識到了這個問題,從STM32G系列開始,重新定義了GPIO模式,並修改了reset狀態,將analog mode作為復位後的狀態,這樣就有效避免了懸空的IO口對功耗的影響


並且,STM32G系列也有專門的描述說明standby模式下GPIO的狀態

綜上所述,GPIO處於懸浮輸入狀態下或開漏輸入狀態下時會增加功耗,處於輸出推挽、輸入上/下拉、analog模式下是比較省電的狀態。用戶可以根據自己電路板實際的外圍電路,選擇其中一種模式作為GPIO的常態,在進入sleep/stop之前將GPIO配置成這種模式(尤其是一些沒用的GPIO口),這樣可以達到省電的目的,也能進一步優化低功耗。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論