1、STM32的低功耗
眾所周知,功耗一直是嵌入式開發(fā)中的重要考慮因素,在便攜式設(shè)備和小型設(shè)備中需要考慮到設(shè)備的功耗,這就要求低功耗設(shè)備在執(zhí)行任務(wù)時盡可能減少能源消耗,以延長電池壽命或降低能源消耗。
在STM32的眾系列中,特別是STM32F103、STM32F4 , STM32L還有STM32U系列,提供了多種低功耗模式和機制,可以降低系統(tǒng)功耗,延長電池壽命或減少能源消耗。包括多個低功耗模式、時鐘管理、外設(shè)控制等。
本期我們將以STM32F103為例介紹STM32的低功耗模式。
硬件設(shè)備:STM32F103C8T6最小系統(tǒng)板
2、低功耗模式
STM32F1的芯片手冊中提到STM32的低功耗總共有三種模式:休眠模式,停止模式,待機模式。并且還可以通過降低系統(tǒng)時鐘的方式來降低功耗。接下來我們詳細(xì)介紹這三種模式的區(qū)別。
從表中我們可以看出三種低功耗模式的進入條件以及喚醒條件,其中低功耗程度從Sleep休眠模式到Standby待機模式遞增。
在待機模式中,需要通過Wake Up引腳的上升沿來喚醒系統(tǒng)(或者RTC報警,RST復(fù)位以及看門狗)
3、睡眠模式
當(dāng)我們配執(zhí)行了WFI或WFE模式(等待中斷或等待事件)來進入睡眠模式。通過配置SLEEPONEXIT位來選擇是否立刻進入睡眠模式。
當(dāng)清除該位時,系統(tǒng)就會立刻進入低功耗模式。當(dāng)該位置1時,就會等待中斷或者事件之后進入低功耗模式。
WFI(中斷)和WFE(事件)模式退出睡眠模式的情況并不相同,如果我們是從WFI進入的睡眠模式,那么當(dāng)中斷事件發(fā)生時,就會退出低功耗模式,例如外部中斷,定時器中斷等。
如果從WFE模式進入的睡眠模式,那么也提供了兩種喚醒方式。
4、停止模式
停止模式可以認(rèn)為是深度睡眠,在停止模式中,將會關(guān)閉掛載在1.8V工作域中的時鐘,還有像HSI和HSE等時鐘也會被關(guān)閉,SRAM和寄存器中的值將會保存下來,IO口的狀態(tài)會保持在之前的運行模式的狀態(tài)。
該表提供了如何進入停止模式以及如何退出停止模式。稍后會在程序中使用。
5、待機模式
待機模式是功耗最低的模式,不僅僅關(guān)閉了各個時鐘,還關(guān)閉了包括1.8V工作域內(nèi)的外設(shè)與時鐘。SRAM和各寄存器內(nèi)的值也會丟失。
該表提供了如何進入待機模式以及退出待機模式,退出待機模式的事件是:WKUP引腳接收到上升沿,RTC時鐘報警以及RST引腳觸發(fā)復(fù)位和看門狗復(fù)位。
需要注意的是喚醒之后系統(tǒng)處于復(fù)位狀態(tài)。
6、程序?qū)崿F(xiàn)
首先創(chuàng)建一份STM32的基礎(chǔ)工程,接著在HAL庫中我們可以使用如下代碼進入低功耗模式:
? ?// 1. 等待 3 秒后進入睡眠模式
? ?HAL_Delay(3000); ?// 延時 3 秒
? ?HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); ?// 進入睡眠模式
? ?// 在這里,MCU進入睡眠模式后,將等待中斷喚醒
? ?// 2. 等待 3 秒后進入停止模式
? ?HAL_Delay(3000); ?// 延時 3 秒
? ?HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); ?// 進入停止模式
? ?// 在這里,MCU進入停止模式后,也會等待中斷喚醒
? ?// 3. 等待 3 秒后進入待機模式
? ?HAL_Delay(3000); ?// 延時 3 秒
? ?HAL_PWR_EnterSTANDBYMode(); ?// 進入待機模式
? ?// 在待機模式下,MCU會停止所有時鐘,直到外部喚醒事件發(fā)生
由于設(shè)備欠缺,無法測試具體他們的功耗如何,因此本期就先到這里。