MM32L0130作為靈動微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對MM32L0130片上外設(shè)SLCD和RTC做了相關(guān)描述,并列舉對應(yīng)程序?qū)崿F(xiàn)SLCD驅(qū)動LCD顯示、RTC日歷和鬧鐘,其實SLCD與RTC都支持在特定的低功耗模式下運行,結(jié)合這兩個外設(shè)特性,在前面實驗的基礎(chǔ)上,使用EVB_L0136開發(fā)板可以輕松實現(xiàn)一個低功耗電子時鐘設(shè)計。本次微課堂通過講述MM32L0130 PWR電源控制模式,以及SLCD 和RTC外設(shè)配置,實現(xiàn)低功耗應(yīng)用場景。
1MM32L0130 PWR簡介
電源控制 PWR(Power Controller)主要涉及芯片的供電系統(tǒng)、電源管理器和低功耗模式等功能。
1.1 供電系統(tǒng)
芯片由兩種電源提供供電:
由VDDA和VSSA提供的模擬電源,為芯片模擬模塊提供電壓,用于ADC模塊、內(nèi)部基準(zhǔn)電壓、內(nèi)部溫度傳感器和 PLL 等。
由VDD和VSS提供的數(shù)字電源,用于數(shù)字部分和I/O引腳工作。
電源控制功能框圖
VDD 域主要給 LSE, HSE, PMU, POR, PVD 和部分 I/O 上的喚醒邏輯供電,在上電后保持工作狀態(tài)。
備份域主要為 RTC、 LCD、 IWDG、備份寄存器和內(nèi)部低速時鐘振蕩器 LSI 供電。
VDD_Core 域主要給芯片的內(nèi)核、內(nèi)存和外設(shè)提供供電,在上電后默認(rèn)是開啟狀態(tài),在進(jìn)入低功耗待機(jī)模式時,芯片會硬件選擇關(guān)閉該 VDD_Core 域,在喚醒后芯片會自動開啟。主要有以下幾種工作狀態(tài):
運行模式
VDD_Core 域以正常的功耗模式運行,內(nèi)存、外設(shè)都正常工作。
低功耗運行模式
VDD_Core 域以低功耗模式運行,內(nèi)存、外設(shè)都以低功耗工作。
睡眠模式
VDD_Core 域以正常功耗模式工作, CPU 進(jìn)入睡眠模式,內(nèi)存、外設(shè)都以正常的功耗模式工作。
低功耗睡眠模式
VDD_Core 域以低功耗睡眠模式工作, CPU 進(jìn)入低功耗睡眠模式,內(nèi)存、外設(shè)都以低功耗工作。
停機(jī)模式
VDD_Core 域以低功耗模式工作,只保持寄存器和 RAM 的內(nèi)容。
深度停機(jī)模式
VDD_Core 域以更低功耗模式工作,只保持寄存器和 RAM 的內(nèi)容。
待機(jī)模式
VDD_Core 域停止供電。除了備份域外,其他所有寄存器和 SRAM 的內(nèi)容全部丟失。
關(guān)機(jī)模式
VDD_Core 域、備份域停止供電。
1.2 MM32L0130低功耗模式
MM32L0130有6種低功耗模式:包括低功耗運行模式,睡眠模式,低功耗睡眠模式,停機(jī)模式,待機(jī)模式,關(guān)機(jī)模式:
低功耗運行模式
進(jìn)一步降低 MCU 在運行模式下的功耗,可以通過配置 PWR_CR1 寄存器的 LPR 位將電壓穩(wěn)壓器設(shè)置為低功耗模式。該模式下系統(tǒng)頻率不應(yīng)超過 2MHz。
Sleep Mode 睡眠模式
CPU 進(jìn)入睡眠模式,內(nèi)存、外設(shè)都以正常的功耗模式工作。在睡眠模式下,所有的 I/O 引腳都保持在運行模式時的狀態(tài)。中斷或事件發(fā)生后,睡眠模式立即被喚醒。
Low Power Sleep Mode 低功耗睡眠模式
CPU 進(jìn)入低功耗睡眠模式,內(nèi)存、外設(shè)都以低功耗工作。在睡眠模式下,所有的 I/O 引腳都保持在運行模式時的狀態(tài)。中斷或事件發(fā)生后,睡眠模式立即被喚醒。
Stop Mode 停機(jī)模式
停機(jī)模式下,CPU 進(jìn)入深度睡眠模式, VDD_Core 域的所有時鐘都被停止, PLL、 HSI 和 HSE 振蕩器的功能被禁止, SRAM 和寄存器內(nèi)容被保留下來。
DeepStop Mode 深度停機(jī)模式
深度停機(jī)是在 CPU 深度睡眠模式的基礎(chǔ)上結(jié)合了外設(shè)的時鐘控制和電壓穩(wěn)壓器控制機(jī)制的一種低功耗模式。在深度停機(jī)模式下, VDD_Core 域的所有時鐘都被停止, PLL、 HSI 和 HSE 振蕩器的功能被禁止, SRAM 和寄存器內(nèi)容被保留下來。
Standby Mode 待機(jī)模式
待機(jī)模式是在 CPU 深睡眠模式的基礎(chǔ)上關(guān)閉電壓穩(wěn)壓器。整個 VDD_Core 域被切斷, PLL、 HSI 和HSE 振蕩器也被關(guān)閉, SRAM 和寄存器內(nèi)容丟失,只有備份域的寄存器和待機(jī)電路維持供電。喚醒后芯片將復(fù)位。
ShutDown Mode 關(guān)機(jī)模式
在關(guān)機(jī)模式下,內(nèi)部所有的穩(wěn)壓器全都被關(guān)閉, BOR 關(guān)閉,只保留 POR 和少數(shù)其他 VDD 域的電路正常工作(PMU 部分邏輯/POR/IO Wakeup 邏輯)。
1.3 功耗模式選擇
一般根據(jù)最低電源消耗,最快啟動時間和可用的喚醒源等條件,選擇一種最佳的低功耗模式。相關(guān)參數(shù)可以參考各系列對應(yīng)的數(shù)據(jù)手冊,如下數(shù)據(jù)從數(shù)據(jù)手冊摘取。
1.31 電流消耗
電流消耗是多種參數(shù)和因素的綜合指標(biāo),這些參數(shù)和因素包括工作電壓、環(huán)境溫度、 I/O引腳的負(fù)載、產(chǎn)品的軟件配置、工作頻率、 I/O 腳的翻轉(zhuǎn)速率、程序在存儲器中的位置以及執(zhí)行的代碼等。本節(jié)中給出的所有運行模式下的電流消耗測量值,都是在執(zhí)行一套精簡的代碼。
睡眠模式下的典型電流消耗:
停機(jī)模式下的典型電流消耗和最大電流消耗:
I/O 狀態(tài)為模擬輸入。
待機(jī)模式下的典型電流消耗和最大電流消耗:
I/O 狀態(tài)為模擬輸入。
關(guān)機(jī)模式下的典型電流消耗和最大電流消耗:
I/O 狀態(tài)為模擬輸入。
1.32 喚醒時間
低功耗模式的喚醒時間:
2實驗
2.1 實驗說明
MM32L0130的RTC和SLCD外設(shè)都支持睡眠模式、停機(jī)模式、和待機(jī)模式。RTC模塊連接到EXTI部分用于低功耗喚醒信號,包括鬧鐘、喚醒單元、入侵事件。SLCD驅(qū)動模塊在不需要顯示的時候,可以完全關(guān)閉 SLCD 驅(qū)動以達(dá)到降低功耗的目的。
硬件使用靈動微電子設(shè)計的EVB-L0136開發(fā)板,板載LCD接口可以適配GDC0689液晶屏,以LCD中的6位數(shù)碼管顯示時間時、分、秒,在1s時間范圍內(nèi)完成喚醒并更新顯示數(shù)據(jù)即可,根據(jù)需要可以選擇停機(jī)模式和待機(jī)模式,待機(jī)模式功耗最低。在STOP模式下, VDD_Core域的所有時鐘都被停止, PLL、 HSI 和 HSE 振蕩器的功能被禁止,SRAM 和寄存器內(nèi)容被保留下來,喚醒之后繼續(xù)執(zhí)行進(jìn)入STOP模式指令之后的程序,可以保證各個任務(wù)順利運行,從STOP模式喚醒時間約為20us,時間相當(dāng)充分,且功耗較正常運行模式降低很多,這里選擇STOP模式。
GDC0689液晶屏全顯效果圖如下:
? ?
2.2 喚醒單元
RTC內(nèi)部包含周期性的喚醒單元,用于喚醒低功耗模式。
RTC 內(nèi)部包含一個 16 位的遞減計數(shù)單元,用于周期性產(chǎn)生喚醒標(biāo)志,該喚醒定時器可擴(kuò)展至 17 位。通過配置 RTC_CR 寄存器中的 WUTE 位使能。喚醒單元時鐘源:
2、4、8 或 16 分頻的 RTC 時鐘:
當(dāng)為 LSE 時,可配置的喚醒中斷周期介于 122μs 和 32s 之間,且分辨率低至 61μs。
fck_spre(通常為 1Hz 內(nèi)部時鐘):
WUCKSEL[2:1]=10 時為 1s 到 18h;
WUCKSEL[2:1]=11 時約為 18h 到 36h。
當(dāng)遞減計數(shù)器計數(shù)到 0 時, RTC_ISR 寄存器的 WUTF 標(biāo)志會置 1,喚醒計數(shù)器會重載 RTC_WUTR寄存器值,通過軟件清零 WUTF 標(biāo)志。
使能 RTC_CR 寄存器中的 WTIE,當(dāng)計數(shù)到 0 時,會產(chǎn)生中斷輸出。
配置 RTC_CR 寄存器中的位 OSEL[1:0]等于 2, WUTF 連接到 RTC_ALARM 輸出。配置 RTC_CR寄存器的 POL 位選擇 RTC_ALARM 輸出極性。
注:系統(tǒng)復(fù)位以及低功耗模式(睡眠、停機(jī)和待機(jī))對喚醒定時器沒有影響。
2.3 外設(shè)配置
關(guān)于SLCD和RTC的初始化配置在前面兩節(jié)微課堂已有相關(guān)描述,以下外設(shè)配置與應(yīng)用程序在前面代碼上進(jìn)行增添即可。
1)配置低功耗模式要先使能PWR時鐘:
RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWREN,ENABLE);
2)在要進(jìn)入STOP模式的代碼后調(diào)用相關(guān)庫函數(shù),選擇低功耗模式,中斷喚醒:
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
3)RTC的時鐘源選擇LSE(32.768KHZ),可配置的喚醒中斷周期介于 122μs 和 32s 之間,且分辨率低至 61μs。此處對RTC時鐘進(jìn)行16分頻,1s計數(shù)2048個,配置喚醒定時器自動重裝載值為256,對應(yīng)125ms,該值越小,喚醒時間越短。
RTCCAL_WakeUpClockConfig(RTCCAL_WakeUpClock_RTCCLK_Div16); RTCCAL_SetWakeUpCounter(256);
使能喚醒單元,使能RTC喚醒中斷:
RTCCAL_WakeUpCmd(ENABLE); RTCCAL_ClearFlag(RTCCAL_FLAG_WUTF); RTCCAL_ITConfig(RTCCAL_IT_WUT,ENABLE);
RTC&BKP 全局中斷與連接到 EXTI17,配置RTC中斷:
RTCCAL_NVIC_Config();
4)SLCD顯示,記錄當(dāng)前日歷和時間,使用LCD的6位數(shù)碼管顯示時分秒,左上方的4位數(shù)碼管顯示年份。
voidLCD_DisplayDataUpdate(void) { Number1=RTCCAL_tempTime.RTCCAL_Seconds; Number2=RTCCAL_tempTime.RTCCAL_Minutes; Number3=RTCCAL_tempTime.RTCCAL_Hours; LCD_DisplayNumber1(0,'0'+Number3/10,0); LCD_DisplayNumber1(1,'0'+Number3%10,0); LCD_DisplayNumber1(2,'0'+Number2/10,0); LCD_DisplayNumber1(3,'0'+Number2%10,0); LCD_DisplayNumber1(4,'0'+Number1/10,0); LCD_DisplayNumber1(5,'0'+Number1%10,0); LCD_DisplayUnit(8,1); LCD_DisplayUnit(9,1); Number4=RTCCAL_tempDate.RTCCAL_Year; LCD_DisplayNumber2(0,'2',0); LCD_DisplayNumber2(1,'0',0); LCD_DisplayNumber2(2,'0'+Number4/10,0); LCD_DisplayNumber2(3,'0'+Number4%10,0); }
5)獲取當(dāng)前日歷和時間,刷新顯示數(shù)據(jù),F(xiàn)lag_GainData、Flag_DataUpdate均為時間標(biāo)志,這里間隔1ms獲取數(shù)據(jù),間隔10ms刷新數(shù)據(jù),F(xiàn)lag_WKUP是中斷喚醒標(biāo)志,數(shù)據(jù)刷新之后再次進(jìn)入STOP模式,等待喚醒,刷新時間是影響功耗的主要參數(shù)之一,需根據(jù)實際應(yīng)用進(jìn)行評估。
if(Flag_GainData==1) { Flag_GainData=0; RTCCAL_GetDate(RTCCAL_Format_BIN,&RTCCAL_tempDate);RTCCAL_GetTime(RTCCAL_Format_BIN,&RTCCAL_tempTime); } if(Flag_DataUpdate==1) { Flag_DataUpdate=0; LCD_DisplayDataUpdate(); if(Flag_WKUP==1) { Flag_WKUP=0; SystemInit(); PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI); LED2_TOGGLE(); } }
2.4 演示
板載LD2(綠色LED)閃爍,程序中LD2的控制引腳在從低功耗模式喚醒之后翻轉(zhuǎn),閃爍表示此時處于低功耗模式進(jìn)入、喚醒狀態(tài)。LCD液晶屏顯示時、分、秒、年份。
本次微課堂在功能設(shè)計上僅是MM32L0130 SLCD與RTC在低功耗模式下的簡單應(yīng)用,如果對此感興趣者,可以自己配置RTC鬧鐘功能、SLCD閃爍模式,以及按鍵調(diào)整時間、蜂鳴提醒、LED顯示等進(jìn)一步完善相關(guān)功能。
審核編輯:湯梓紅
-
電子時鐘
+關(guān)注
關(guān)注
11文章
197瀏覽量
24520 -
VDD
+關(guān)注
關(guān)注
1文章
311瀏覽量
33186 -
靈動微電子
+關(guān)注
關(guān)注
7文章
121瀏覽量
19638 -
MM32
+關(guān)注
關(guān)注
1文章
106瀏覽量
756
原文標(biāo)題:靈動微課堂 (第234講) | 基于MM32L0130的低功耗電子時鐘設(shè)計
文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論