靈動微-MM32 電源管理
在應用開發(fā)中,通常需要考慮當出現系統供電電壓下降或掉電突發(fā)狀況時,需對控制系統加以保護,防止出現意外,故在程序中需加入對系統電壓的監(jiān)控。當供電電壓降低到某一電壓值時,需要系統進入特別保護狀態(tài),執(zhí)行緊急關閉任務:對系統的一些數據保存起來,同時對外設進行相應的保護操作。MM32L0系列產品的工作電壓(VDD)為 2.0V ~ 5.5V。通過內置的電壓調節(jié)器提供所需的 1.5V 電源。

注: VDDA 和 VSSA 必須分別連到 VDD和 VSS。
MM32L0系列產品內部有一個完整的上電復位(POR)和掉電復位(PDR)電路,當供電電壓達到 2.0V 時系統才能正常工作。
當 VDD/VDDA 低于指定的限位電壓 VPOR/VPDR時,系統保持為復位狀態(tài),而無需外部復位電路。

POR = Power On Reset 上電復位;PDR = Power Down Reset 掉電復位。
POR的功能是在VDD電壓由低向高上升越過規(guī)定的閥值之前,保持芯片復位,當越過這個閥值后的一小段時間后(圖中的"滯后時間"或表中的"復位遲滯"),結束復位并取復位向量,開始執(zhí)行指令。當VDD上升越過POR閥值時,內部并不馬上結束復位,而是等待一小段時間(Reset temporization)。Reset temporization是為了等待供電電壓能夠升高到最低可靠工作電壓以上,我們看到POR閥值典型值只有1.656V(參考MM32 DS手冊表內嵌復位和電源控制模塊特性),低于數據手冊中給出的最低可靠工作電壓2.0V,所以這個滯后時間是十分必要的,如果供電電壓上升緩慢,尤其是從1.8V升到2.0V以上超過1~2.5ms,則很可能造成上電復位后MCU不能正常工作的情況。
PDR功能是在VDD電壓由高向低下降越過規(guī)定的閥值后,將在芯片內部產生復位。
MM32內部自帶PVD功能,用于對MCU供電電壓VDD進行監(jiān)控。通過電源控制寄存器中的PLS[12:9]位來設定監(jiān)控電壓的閥值,通過對外部電壓進行比較來監(jiān)控電源。當條件觸發(fā),需要系統進入特別保護狀態(tài),執(zhí)行緊急關閉任務:對系統的一些數據保存起來,同時對外設進行相應的保護操作。
用戶可以利用 PVD 對 VDD電壓與電源控制寄存器(PWR_CTRL)中的PLS[12:9]位進行比較來監(jiān)控電源,這幾位選擇監(jiān)控電壓的閥值。

PVD = Programmable Votage Detector 可編程電壓監(jiān)測器,它的作用是監(jiān)視供電電壓,在供電電壓下降到給定的閥值以下時,產生一個中斷,通知軟件做緊急處理。
PLS[12:9]位用于選擇PVD監(jiān)控電源的電壓閥值:
0000:1.8V 0101:3.3V 1010:4.8V
0001:2.1V 0110:3.6V
0010:2.4V 0111:3.9V
0011:2.7V 1000:4.2V
0100:3.0V 1001:4.5V
電源控制/狀態(tài)寄存器(PWR_CSTA)中的 PVDO 標志用來表明 VDD是高于還是低于 PVD 的電壓閥值。該事件在內部連接到外部中斷的第 16線,如果該中斷在外部中斷寄存器中是使能的,該事件就會產生中斷。當 VDD下降到 PVD 閥值以下和(或)當 VDD 上升到 PVD 閥值之上時,根據外部中斷第 16 線的上升/下降邊沿觸發(fā)設置,就會產生 PVD 中斷。例如,這一特性可用于用于執(zhí)行緊急關閉任務。
一、庫函數操作流程(中斷方式):
1)、電源接口時鐘使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
2)、PWR_PVDLevelConfig(PWR_PVDLevel_4V2); // 設定監(jiān)控閥值
3)、PWR_PVDCmd(ENABLE); // 使能PVD
4)、EXTI_ClearITPendingBit(EXTI_Line16);//清中斷
5)、EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD連接到中斷線16上
6)、EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中斷模式
7)、EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//表示電壓上升或下降越過設定閥值時都產生中斷
8)、EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中斷線
9)、EXTI_Init(&EXTI_InitStructure); // 初始化
EXTI_InitStructure.EXTI_Trigger的賦值可選項:
EXTI_Trigger_Rising---表示電壓從高下降到低于設定閥值時產生中斷;
EXTI_Trigger_Falling---表示電壓從低上升到高于設定閥值時產生中斷;
EXTI_Trigger_Rising_Falling---表示電壓上升或下降越過設定閥值時都產生中斷。
10)、中斷優(yōu)先級配置
NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
2、當工作電壓低于設定閥值時,將產生PVD中斷,在中斷程序中進行相應的處理:
void PVD_IRQHandler(void)
{
if( RESET != EXTI_GetITStatus(EXTI_Line16))
{
EXTI_ClearITPendingBit(EXTI_Line16); …… // 用戶添加緊急處理代碼處
WriteToBackupReg(0x3210);//往BKP寄存器里面存數據
}
}
在測試的例程中,我配置的PVD工作方式為中斷上升和下降沿觸發(fā),當VDD高于預設PVD閾值或者低于閾值而產生邊沿觸發(fā)時,都會形成一次PVD中斷,然后讀取PWR_CSR的PVDO標志位檢查是低電壓提醒還是高電壓提醒,以此來達到監(jiān)控MCU供電情況的目的。
二、寄存器操作流程(查詢方式):
1)、電源接口時鐘使能
RCC->APB1ENR |= 0x10000000;
2)、設置閾值電壓,電源電壓檢測器(PVD)使能
PWR->CR =0x1010; //電壓檢測閾值=4.2v,PVDE=1使能
3)、等待PVDO輸出狀態(tài)
if((PWR->CSR&0x0004) !=0)
{
SCB->AIRCR =0x05fa0004;//軟件復位
}
else
{
WriteToBackupReg(0x3210);//往BKP寄存器里面存數據
return;
}
小結:
1、 MM32L0系列產品 PVD所對應的時鐘掛在APB1上,在使用PVD功能時需要使能PWR時鐘。
2、 使用寄存器配置如何判斷掉電過程還是還是上電過程?
可以根據電源控制/狀態(tài)寄存器(PWR_CSR)的PVDO位來判斷,PVDO從1變0表示上電過程,從0變1表示掉電過程,用戶可以根據該位來判斷是需要上電復位還是掉電復位。
如需要了解更多靈動微MCU產品,請聯系靈動微核心代理商-穎特新科技

編輯:ls 最后修改時間:2022-06-08