FreeRTOS 低功耗之睡眠模式
以下轉(zhuǎn)載自安富萊電子:http://forum.armfly.com/forum.php
低功耗是 MCU 的一項(xiàng)重要的指標(biāo),比如某些可穿戴的設(shè)備,其攜帶的電量有限,如果整個(gè)電路消耗
的電量特別大的話,就會(huì)經(jīng)常出現(xiàn)電量不足的情況,影響用戶體驗(yàn)。
STM32F103 睡眠模式介紹
說明:在 FreeRTOS 系統(tǒng)上面實(shí)現(xiàn)睡眠方式僅需了解這里講解的知識(shí)基本就夠用了,更多睡眠方式的
知識(shí)請(qǐng)看 STM32F103 參考手冊(cè)和 Cortex-M3 權(quán)威指南。
在系統(tǒng)或電源復(fù)位以后,微控制器處于運(yùn)行狀態(tài)。當(dāng) CPU 不需繼續(xù)運(yùn)行時(shí),可以利用多種低功耗模
式來節(jié)省功耗,例如等待某個(gè)外部事件時(shí),用戶需要根據(jù)最低電源消耗、最快速啟動(dòng)時(shí)間和可用的喚醒源
等條件,選定一個(gè)最佳的低功耗模式。
STM32F103 有三種低功耗模式:
? 睡眠模式(Cortex™-M3 內(nèi)核停止,所有外設(shè)包括 Cortex-M3 核心的外設(shè),如 NVIC、系統(tǒng)滴答
定時(shí)器 Systick 等仍在運(yùn)行)。
? 停機(jī)模式(所有的時(shí)鐘都已停止)。
? 待機(jī)模式(1.8V 電源關(guān)閉)。
如何進(jìn)入睡眠模式
通過執(zhí)行 WFI(等待中斷)或 WFE(等待事件)指令進(jìn)入睡眠狀態(tài)。根據(jù) Cortex™-M3 系統(tǒng)控制
寄存器中的 SLEEPONEXIT 位的值,可以通過兩種方案選擇睡眠模式進(jìn)入機(jī)制:
? SLEEP-NOW:如果 SLEEPONEXIT 位被清除,當(dāng) WFI 或 WFE 被執(zhí)行時(shí),微控制器立即進(jìn)入睡眠模式。
? SLEEP-ON-EXIT:如果 SLEEPONEXIT 位被置位,系統(tǒng)從最低優(yōu)先級(jí)的中斷處理程序中退出時(shí),微控
制器就立即進(jìn)入睡眠模式。
實(shí)際應(yīng)用中我們采用 WFI 指令進(jìn)入睡眠模式,睡眠模式的進(jìn)入機(jī)制是采用的 SLEEP-NOW。 因?yàn)橄?br />統(tǒng)復(fù)位上電后 SLEEPONEXIT 位是被清除的,所以這個(gè)位也不需要專門的去設(shè)置。 另外在睡眠模式下,所
有的 I/O 引腳都保持它們?cè)谶\(yùn)行模式時(shí)的狀態(tài)。
在 FreeRTOS 系統(tǒng)上,不使用 tickless 低功耗模式的話,我們可以將 WFI 指令放到空閑任務(wù)里面實(shí)
現(xiàn)。 不過,既然有了 tickless 模式,基本就不需要采用這種方法了。
如何退出睡眠模式
由于我們是采用指令 WFI 進(jìn)入睡眠模式,那么任意一個(gè)被嵌套向量中斷控制器 NVIC 響應(yīng)的外設(shè)中斷
都能將系統(tǒng)從睡眠模式喚醒。并且該模式喚醒所需的時(shí)間最短,因?yàn)闆]有時(shí)間損失在中斷的進(jìn)入或退出上。
在 FreeRTOS 系統(tǒng)上,主要是周期性執(zhí)行的系統(tǒng)滴答定時(shí)器中斷會(huì)將系統(tǒng)從睡眠態(tài)喚醒,當(dāng)然,其它
的任意中斷也可以將其從睡眠態(tài)喚醒。
STM32F4xx 睡眠模式介紹
說明:本小節(jié)的內(nèi)容含 STM32F407 和 STM32F429,在 FreeRTOS 系統(tǒng)上面實(shí)現(xiàn)睡眠方式僅需了解
這里講解的知識(shí)基本就夠用了,更多睡眠方式的知識(shí)請(qǐng)看 STM32F4xx 參考手冊(cè)和 Cortex-M4 權(quán)威指南。
默認(rèn)情況下,系統(tǒng)復(fù)位或上電復(fù)位后,微控制器進(jìn)入運(yùn)行模式。在運(yùn)行模式下,CPU 通過 HCLK 提
供時(shí)鐘,并執(zhí)行程序代碼。系統(tǒng)提供了多個(gè)低功耗模式,可在 CPU 不需要運(yùn)行時(shí)(例如等待外部事件時(shí))
節(jié)省功耗。由用戶根據(jù)應(yīng)用選擇具體的低功耗模式,以在低功耗、短啟動(dòng)時(shí)間和可用喚醒源之間尋求最佳
平衡。
STM32F4xx 有三個(gè)低功耗模式:
? 睡眠模式(Cortex™-M4F 內(nèi)核停止,外設(shè)保持運(yùn)行)
? 停機(jī)模式(所有時(shí)鐘都停止)
? 待機(jī)模式(1.2 V 域斷電)
如何進(jìn)入睡眠模式
執(zhí)行 WFI(等待中斷)或 WFE(等待事件)指令即可進(jìn)入睡眠模式。根據(jù) Cortex™-M4F 系統(tǒng)控
制寄存器中 SLEEPONEXIT 位的設(shè)置,可以通過兩種方案選擇睡眠模式進(jìn)入機(jī)制:
? 立即睡眠:如果 SLEEPONEXIT 位清零, MCU 將在執(zhí)行 WFI 或 WFE 指令時(shí)立即進(jìn)入睡眠模式
? 退出時(shí)睡眠:如果 SLEEPONEXIT 位置 1,MCU 將在退出優(yōu)先級(jí)最低的 ISR 時(shí)立即進(jìn)入睡眠模式。
實(shí)際應(yīng)用中我們采用 WFI 指令進(jìn)入睡眠模式,睡眠模式的進(jìn)入機(jī)制是采用的立即睡眠。 因?yàn)橄到y(tǒng)復(fù)位
上電后 SLEEPONEXIT 位是被清除的,所以這個(gè)位也不需要專門的去設(shè)置。 另外在睡眠模式下,所有的 I/O
引腳都保持它們?cè)谶\(yùn)行模式時(shí)的狀態(tài)。
在 FreeRTOS 系統(tǒng)上,不使用 tickless 低功耗模式的話,我們可以將 WFI 指令放到空閑任務(wù)里面實(shí)
現(xiàn)。 不過,既然有了 tickless 模式,基本就不需要采用這種方法了。
如何退出睡眠模式
由于我們是采用指令 WFI 進(jìn)入睡眠模式,那么任意一個(gè)被嵌套向量中斷控制器 NVIC 響應(yīng)的外設(shè)中斷
都能將系統(tǒng)從睡眠模式喚醒。并且該模式喚醒所需的時(shí)間最短,因?yàn)闆]有時(shí)間損失在中斷的進(jìn)入或退出上。
在 FreeRTOS 系統(tǒng)上,主要是周期性執(zhí)行的系統(tǒng)滴答定時(shí)器中斷會(huì)將系統(tǒng)從睡眠態(tài)喚醒,當(dāng)然,其它
的任意中斷也可以將其從睡眠態(tài)喚醒。
低功耗模式的調(diào)試支持
要進(jìn)入低功耗模式需要調(diào)用指令 WFI 或 WFE。
STM32 支持多個(gè)低功耗模式,這些模式可以禁止 CPU 時(shí)鐘或降低 CPU 功耗。 內(nèi)核不允許在調(diào)試期
間關(guān)閉 FCLK 或 HCLK,因?yàn)檎{(diào)試期間需要使用它們進(jìn)行調(diào)試連接,因此必須保持激活狀態(tài)。 STM32 集
成了特殊方法,允許用戶在低功耗模式下調(diào)試軟件。 為實(shí)現(xiàn)這一功能,調(diào)試器必須先設(shè)置一些配置寄存器
來改變低功耗模式的特性。
? 在睡眠模式下,調(diào)試器必須先置位 DBGMCU_CR 寄存器的 DBG_SLEEP 位。這將為 HCLK 提供與
FCLK(由代碼配置的系統(tǒng)時(shí)鐘)相同的時(shí)鐘。
調(diào)用庫(kù)函數(shù):DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可
? 在停機(jī)模式下,調(diào)試器必須先置位 DBG_STOP 位。這將激活內(nèi)部 RC 振蕩器,在停止模式下為 FCLK
和 HCLK 提供時(shí)鐘。
調(diào)用庫(kù)函數(shù):DBGMCU_Config(DBGMCU_STOP, ENABLE);即可
如何有效降低睡眠模式下的功耗
設(shè)計(jì)低功耗主要從以下幾方面著手:
? 關(guān)閉可以關(guān)閉的外設(shè)時(shí)鐘。
? 降低系統(tǒng)主頻。
? 注意 I/O 的狀態(tài),因?yàn)樗吣J较拢械?I/O 引腳都保持它們?cè)谶\(yùn)行模式時(shí)的狀態(tài)。
? 如果此 I/O 口帶上拉,請(qǐng)?jiān)O(shè)置為高電平輸出或者高阻態(tài)輸入。
? 如果此 I/O 口帶下拉,請(qǐng)?jiān)O(shè)置為低電平輸出或者高阻態(tài)輸入。
? 注意 I/O 和外設(shè) IC 的連接。
? 測(cè)試低功耗的時(shí)候,一定不要連接調(diào)試器,更不能邊調(diào)試邊測(cè)電流。
總結(jié)
以上是生活随笔為你收集整理的FreeRTOS 低功耗之睡眠模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE的"Kiosk"
- 下一篇: 幸福树是什么?幸福树的作用及养护方法