在低功耗應用中,一般來說mcu是常態halt模式,然後偶爾被喚醒(外部中斷或者內部定時喚醒)進入執行模式。所以對比低功耗效能,一般來說只需要對比run模式和halt下的功耗即可,因為專案選用的是通過內部定時器喚醒,所以選用active halt mode。以下是stm8s003和stm8l151在這兩種模式下的功耗對比:
在使用同樣的16m內部rc振盪器情況下,stm8s 3.7ma,stm8l 3.54ma,兩款mcu耗電量差不多。
在同樣的關閉外設,且使用內部低速rc振盪器喚醒的情況下:stm8s 10ua,stm8l 0.54ua。大約有20倍的差距,不過對於要求不是特別高的情況下,ua級別的差距影響不會太大。
為了實際驗證
,分別將微控制器焊接到空板子上編寫**進行測試。
32ms喚醒一次
主程式:
void main(void) }
中斷處理程式:
32ms喚醒一次
主程式:
void main(void)
gpio_init(gpioa, gpio_pin_all, gpio_mode_out_pp_low_slow);
gpio_init(gpiob, gpio_pin_all, gpio_mode_out_pp_low_slow);
gpio_init(gpioc, gpio_pin_all, gpio_mode_out_pp_low_slow);
gpio_init(gpiod, gpio_pin_all, gpio_mode_out_pp_low_slow);
gpio_init(gpioe, gpio_pin_all, gpio_mode_out_pp_low_slow);
gpio_init(gpiof, gpio_pin_all, gpio_mode_out_pp_low_slow);
gpio_write(gpioa,0x00);
gpio_write(gpiob,0x00);
gpio_write(gpioc,0x00);
gpio_write(gpiod,0x00);
gpio_write(gpioe,0x00);
gpio_write(gpiof,0x00);
rtc_deinit(); //初始化預設狀態
clk_peripheralclockconfig(clk_peripheral_rtc, enable); //允許rtc時鐘
clk_rtcclockconfig(clk_rtcclksource_lsi, clk_rtcclkdiv_1); // 38k/1
rtc_wakeupclockconfig(rtc_wakeupclock_rtcclk_div2); //38/2=19k
rtc_setwakeupcounter(19*32); //19*32 32ms
rtc_itconfig(rtc_it_wut, enable); //開啟中斷
pwr_fastwakeupcmd(disable); //關閉快速喚醒功能
pwr_ultralowpowercmd(enable);//超低功耗
rtc_wakeupcmd(enable);
while(1)
halt();
中斷處理程式:
STM8L之低功耗
1 stm8l有幾個模式?a.非低功耗模式1個,run mode 執行模式 b.低功耗模式 3個 wait 等待模式 active halt 活躍停機模式 halt 停機模式 2 stm8l低功耗的3個模式有什麼區別?簡單地來說,就是 a.wait 等待模式 時鐘關閉 外設可用。通過中斷 外部中斷 ...
STM8S低功耗處理
要低功耗設計,主要考慮幾個方面 1.外設的低功耗,不需要的外設模組,全部關閉。2.gpio的處理,不需要的io最好做懸浮輸入處理。3.主時鐘的處理,先降到最低內部lsi時鐘,關閉其他不需要的時鐘模組。4.進入低功耗模式。除了執行模式,可以採用以下三種低功耗模式 等待 主動停機 停機。1 等待 wai...
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...