低功耗可以說是stm8l系列微控制器的核心特色了。假設假設我們有乙個溫度感測器裝置,他處於某種很特殊的地方,只能使用電池,而且我們很難去更換,那麼低功耗就顯得尤為重要。那麼繼續假設我們這個溫度感測器不需要一直工作,只需要1小時採集一次資料就行了,也就是說,乙個小時內,我們這個感測器只工作1秒鐘,那麼剩下的59分59秒怎麼辦?也許有的同學就會說了,while(1)迴圈啊,這種回答就很沒有靈性。都不需要工作了,我們還關機不就行了,讓它一小時啟動一次,測量完就繼續關機。那麼就可以讓電池裡的電物盡其用。stm8l就有乙個停機指令halt(),執行這條指令後,核心時鐘停止工作,就相當於關機了。
但是並不是停機了,整個電路中的電流消耗就達到了最小!
第一:雖然mcu是停機了,但是電路板還有其他的晶元在工作,它們仍然在消耗電量,所以我們在停機前應該要把其他晶元給關閉(可以通過特定的指令或者片選線)。條件好的可以直接用切斷它們的電源。
第二:我是這樣理解的:進入停機模式後,只是mcu中最耗電的核心部分被關了,而所有暫存器和記憶體中的值是保持不變的,所以它的外設還在消耗電量,所以我們要在停機之前把開啟的外設給關了。這裡要注意一點:外設開啟時是先開時鐘再設定暫存器,關閉時先清除暫存器再關閉時鐘。我是這樣理解的:操縱乙個外設的暫存器肯定是需要時鐘的,如果我們先把時鐘給關了,那麼還怎麼操作暫存器呢,如果光關了時鐘,不清暫存器的相應位,那麼外設還處於「靜態耗電」的狀態。在研究低功耗的過程中,我被這個坑了好久。關於這一點的例項可以參考這篇部落格:
第三:關於io口的電平,這個是非常重要的一點,和之前提到的外設一樣,gpio也是一種外設,但是特殊的是,這個外設是和晶元外部直接打交道的,如果gpio外部接了個上拉電阻,而你在停機之前設定的io口是低電平的,那麼電流不就通過電阻,流到io口裡來了,比如正常的說接了個10k的上拉電阻,接到3.3v電壓上,那麼電流就是330ua,這個值可不小呢,stm8l在停機時極限最小電流好像能達到0.4ua。那麼你這個電路就是因為這個電阻,停機電流比別人大了將近800倍了,那麼假如你的產品能待機1年,人家待機800年,這還怎麼比?所以io口是絕對不能被忽視的。stm8l晶元復位以後所有引腳都是浮空輸入模式,理論上懸浮空輸入時io口的狀態為高阻態是最省電的,那麼我們只要把所有io都deinit就可以了。但是事實上不是,我把沒有用到的管腳全部推挽輸出高電平或低電平,不用的外部晶振的引腳要改為上拉輸入才省電,外部有上拉下拉電阻的引腳分別推挽輸出高電平和低電平,一般電路中上拉電阻比較多(比如iic的匯流排外部都有上拉的)。和外部晶元相連的引腳都推挽輸出低電平,因為外部晶元斷電後所有引腳都是高阻態或接地的吧,如果你弄個高電平,就可能會有電流流過去。
在實際的專案中我們採用的方法是進入停機模式後,只有rtc時鐘在工作,然後rtc每隔一段時間喚醒一次mcu,muc工作完成後繼續停機。
停機的**為:
deinit外設;
關閉外設時鐘;
逐個配置gpio的電平
clk_haltconfig(clk_halt_fastwakeup,enable); //快速喚醒後時鐘為hsi
pwr_fastwakeupcmd(enable); //開啟電源管理裡的快速喚醒
pwr_ultralowpowercmd(enable); //使能電源的低功耗模式(這句話的作用很大)
rtc_itconfig(rtc_it_wut, enable); //使能rtc中斷
clk_hsicmd(disable); //關閉內部高速時鐘(之前核心是工作在hsi下的)
//sim(); //關閉所有中斷,手冊上說最好關閉所有中斷在進入停機模式,但是好像這條指令並不會關閉rtc中斷,我也沒用這行**
halt(); //到這一步執行完後,核心時鐘就停止了,進入停機模式
wakeup_init(); //rtc喚醒後pc指標在這裡,從這裡開始執行,所以我們要在這裡新增初始化各種外設和外部晶元的**
最後我測出來實際進入休眠模式後電流5~6ua左右,和理想的還是有一點差距,因為我們的板子上帶有穩壓晶元,消耗量一部分的電流。
這裡有網友分享的低功耗模式下電流的資料:
STM8L之低功耗
1 stm8l有幾個模式?a.非低功耗模式1個,run mode 執行模式 b.低功耗模式 3個 wait 等待模式 active halt 活躍停機模式 halt 停機模式 2 stm8l低功耗的3個模式有什麼區別?簡單地來說,就是 a.wait 等待模式 時鐘關閉 外設可用。通過中斷 外部中斷 ...
STM8l 進入低功耗之前配置
在做stm8l的小乙個專案,由電池供電,當按鍵長按關機,系統進入 停機模式,雖然系統執行的時候有十幾毫安的電流消耗 還沒使用rtc 定時喚醒 但是在停機模式下電流消耗竟然還有1.33ma的電流,花了 半天的時間找資料,看文件,在網上看到不少大牛能做到0.4ua,自己 無論如何設定io,外設都無補於事...
STM8L低功耗除錯總結
檢視資料手冊的低功耗特性 low power features 可以了解到,stm8有5種功耗模式,如果讓mcu待機,最低功耗可以達到350na,這是相當的小!5 low power modes wait,low power run 5.1 a low power wait 3 a active h...