1. 程式人生 > >第21章 RTX 低功耗之睡眠模式

第21章 RTX 低功耗之睡眠模式

尋求 狀態 操作系統 位或 nvi 可用 1.8 必須 進入

低功耗是 MCU 的一項非常重要的指標,比如某些可穿戴的設備,其攜帶的電量有限,如果整個電路
消耗的電量特別大的話,就會經常出現電量不足的情況,影響用戶體驗。
本章節為大家講解 M3/4的低功耗方式之睡眠模式在 RTX 操作系統上面的實
現方法RTX 本身支持的 tickless 低功耗模式在第 24 章節講解

STM32F103 睡眠模式介紹
說明:在 RTX 系統上面實現睡眠方式僅需了解這裏講解的知識基本就夠用了,更多睡眠方式的知識請
看 STM32F103 參考手冊和 Cortex-M3 權威指南。
在系統或電源復位以後,微控制器處於運行狀態。當 CPU 不需繼續運行時,可以利用多種低功耗模
式來節省功耗,例如等待某個外部事件時。用戶需要根據最低電源消耗、最快速啟動時間和可用的喚醒源
等條件,選定一個最佳的低功耗模式。
STM32F103 有三種低功耗模式:
? 睡眠模式(Cortex?-M3 內核停止,所有外設包括 Cortex-M3 核心的外設,如 NVIC、系統滴答定時
器 Systick 等仍在運行)
? 停止模式(所有的時鐘都已停止)。
? 待機模式(1.8V 電源關閉)。
本章節我們主要講解睡眠模式,而在實際的睡眠模式編程時我需要清楚那些問題呢?請繼續往下看。

如何進入睡眠模式
通過執行 WFI(等待中斷)或 WFE(等待事件)指令進入睡眠狀態。根據 Cortex?-M3 系統控制
寄存器中的 SLEEPONEXIT 位的值,有兩種選項可用於選擇睡眠模式進入機制:
? SLEEP-NOW:如果 SLEEPONEXIT 位被清除,當 WRI 或 WFE 被執行時,微控制器立即進入睡眠模
式。
? SLEEP-ON-EXIT:如果 SLEEPONEXIT 位被置位,系統從最低優先級的中斷處理程序中退出時,微控
制器就立即進入睡眠模式。
小結:本章節配套的睡眠例子我們采用 WFI 指令進入睡眠模式,睡眠模式的進入機制是采用的
SLEEP-NOW。 因為系統復位上電後 SLEEPONEXIT 位是被清除的,所有這個位也不需要專門的去設置。

另外在睡眠模式下,所有的 I/O 引腳都保持它們在運行模式時的狀態。
在 RTX 系統上,我們可以將 WFI 指令放到空閑任務裏面實現。
如何退出睡眠模式
由於我們是采用指令 WFI 進入睡眠模式,那麽任意一個被嵌套向量中斷控制器 NVIC 響應的外設中斷
都能將系統從睡眠模式喚醒。並且該模式喚醒所需的時間最短,因為沒有時間損失在中斷的進入或退出上。
在 RTX 系統上,主要是周期性執行的系統滴答定時器中斷會將系統從睡眠態喚醒,當然,其它的任意
中斷也可以將其從休眠態喚醒。
STM32F407 睡眠模式介紹
說明:在 RTX 系統上面實現睡眠方式僅需了解這裏講解的知識基本就夠用了,更多睡眠方式的知識請
看 STM32F407 參考手冊和 Cortex-M4 權威指南。
默認情況下,系統復位或上電復位後,微控制器進入運行模式。在運行模式下,CPU 通過 HCLK 提
供時鐘,並執行程序代碼。系統提供了多個低功耗模式,可在 CPU 不需要運行時(例如等待外部事件時)
節省功耗。由用戶根據應用選擇具體的低功耗模式,以在低功耗、短啟動時間和可用喚醒源之間尋求最佳
平衡。 STM32F407 有三個低功耗模式:
? 睡眠模式(Cortex?-M4F 內核停止,外設保持運行)
? 停止模式(所有時鐘都停止)
? 待機模式(1.2 V 域斷電)
本章節我們主要講解睡眠模式,而在實際的休眠模式編程時我需要清楚那些問題呢?請繼續往下看。
低功耗模式的調試支持
使用 WFI 和 WFE 可以進入低功耗模式。
MCU 支持多種低功耗模式,分別可以關閉 CPU 時鐘,或降低 CPU 的能耗。內核不允許在調試期間
關閉 FCLK 或 HCLK。這些時鐘對於調試操作是必要的,因此在調試期間,它們必須工作。 MCU 使用一種
特殊的方式,允許用戶在低功耗模式下調試代碼。為實現這一功能,調試器必須先設置一些配置寄存器來
改變低功耗模式的特性。
? 在睡眠模式下,調試器必須先置位 DBGMCU_CR 寄存器的 DBG_SLEEP 位。這將為 HCLK 提供與
FCLK(由代碼配置的系統時鐘)相同的時鐘。
調用庫函數:DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可
? 在停止模式下,調試器必須先置位 DBG_STOP 位。這將激活內部 RC 振蕩器,在停止模式下為 FCLK
和 HCLK。
調用庫函數:DBGMCU_Config(DBGMCU_STOP, ENABLE);即可
如何有效降低休眠模式下的功耗
設計低功耗主要從以下幾方面著手:
? 關閉可以關閉的外設時鐘。
? 降低系統主頻。
? 註意 I/O 的狀態,因為休眠模式下,所有的 I/O 引腳都保持它們在運行模式時的狀態。
? 如果此 I/O 口帶上拉,請設置為高電平輸出或者高阻態輸入。
? 如果此 I/O 口帶下拉,請設置為低電平輸出或者高阻態輸入。
? 註意 I/O 和外設 IC 的連接。
? 測試低功耗的時候,一定不要連接調試器,更不能邊調試邊測電流。

第21章 RTX 低功耗之睡眠模式