STM8L151G6U6 之實現低功耗RTC喚醒

2021-10-07 05:46:31 字數 1606 閱讀 6782

所謂低功耗產品,一般來講就是在大多數時間讓mcu進入睡眠模式,在有資料更新時喚醒,將資料顯示或者傳送上報。對於中斷型別的,可以採用中斷直接喚醒mcu的方式,而對於溫濕度之類的感測器,只能採用定時喚醒,然後取樣並比較判斷當前的值是否傳送變化,然後顯示或者上報。

如果使用了顯示屏,wifi、藍芽等模組,則需要在睡眠時將其斷電。硬體上需要公升壓電路,否則有些外設在低電壓時驅不起來。

stm8l本身在halt模式下消耗電流為350na,在active-halt with rtc模式下為1.3ua。

最先的版本測試電流達到了1ma以上,草,趕緊折騰了一下,發現在進低功耗之前需要將相關的adc、timer等關閉,此時達到了70ua左右,折騰,發現部分使用到的io口需要根據硬體進行相關的配置,這樣可以達到20ua左右,再折騰,發現沒有連到電路的io設定為輸出低電平,又可以降低,這次是2.4ua,,,再折騰,發現pwr_ultralowpowercmd(enable);需要開啟,這次到了0.4ua。好了

m8l151g6u6,該mcu是stm8l超低功耗系列,與152系列相比只是少了lcd的功能,官方手冊介紹的各個低功耗模式的功耗如下:

其低功耗效能還是很不錯的,在本文中是基於活躍停機低功耗模式來測試的。

要實現stm8l151g6的低功耗,主要可以注意以下幾點:

不需要用到的外設一律不使能外設時鐘,對於臨時使用的外設,只需在使用時臨時開啟即可,使用完畢關閉時鐘

2.合理配置gpio口的狀態,對於沒有使用到的gpio,可將其設為上拉輸出低,gpio_init(gpiof, gpio_pin_0, gpio_mode_out_pp_low_slow);對於使用到的gpio口,則要看你外電路的接法,如用乙個gpio低電平來控制led亮燈,則要實現低功耗時,需把gpio口置高;另一種情況是對於使用到的中斷管腳,將該管腳上拉時,當發生中斷電路接地時,該電阻則形成迴路,有一定的消耗電流,可選用較大的電阻做外部上拉電阻,則大大減低電流。

最重要的一點,由於stm8l151g6有電源管理部分,故必須在進入睡眠之前使能低功耗模式,具體庫函式為:

pwr_ultralowpowercmd(enable);

stm8l系列的mcu資料手冊表明工作電壓可低到1.65v,當要實現這個功能是有要求的,必須勾選選項位元組中的bor_on brownout reset off,不啟用bor,這個可以在燒錄軟體中選擇,這個在參考手冊中有下面的描述

in low density devices, medium density devices and in the medium+ and high density

devices operating from 1.8v to 3.6v (device part numbers without 「d」 suffix), the bor starts

to work above the por threshold (see section 6.3: brownout reset (bor) on page 66). to

ensure the minimum operating voltage (1.65 v), the bor should be configured to bor

level 0.

我根據上述幾點,對自己的專案進行測試,使用活躍停機模式,rtc 30s自動喚醒,最後測試的休眠電流能做到4.7ua。

STM8L151G6U6 之實現低功耗

先簡單介紹下stm8l151g6u6,該mcu是stm8l超低功耗系列,與152系列相比只是少了lcd的功能,官方手冊介紹的各個低功耗模式的功耗如下 其低功耗效能還是很不錯的,在本文中是基於活躍停機低功耗模式來測試的。要實現stm8l151g6的低功耗,主要可以注意以下幾點 1.不需要用到的外設一律...

STVD 新建STM8L151工程

最近從iar轉到stvd來進行stm8l151的開發,看了一下如何配置stvd的開發環境以及如何新建工程,在這個就做個備忘吧。1.先安裝stvd 和 cosmic c編譯器,cosmic 編譯器有8k的編譯限制,但據官網上說好像可以免費到32k了。2.新建一 個workspace,3.填寫works...

STVD下STM8L151使用官方韌體庫開發

相信很多朋友在stm8的開發中很多是使用官方的韌體庫來進行開發的,這樣開發速度快,並且程式不易出錯。前面的部落格講到了如何在stvd中新建乙個新的stm8l151的工程,最後新建成功後,出現下面的工程目錄 在stm8 interrupt vector.c 檔案中,如下 basic interrupt...