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