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