STM32 可編程電壓監(jiān)測(cè)器(PVD)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
STM32內(nèi)部自帶PVD功能,用于對(duì)MCU供電電壓VDD進(jìn)行監(jiān)控。通過(guò)電源控制寄存器中的PLS[2:0]位可以用來(lái)設(shè)定監(jiān)控電壓的閥值,通過(guò)對(duì)外部電壓進(jìn)行比較來(lái)監(jiān)控電源。當(dāng)條件觸發(fā),需要系統(tǒng)進(jìn)入特別保護(hù)狀態(tài),執(zhí)行緊急關(guān)閉任務(wù):對(duì)系統(tǒng)的一些數(shù)據(jù)保存起來(lái),同時(shí)對(duì)外設(shè)進(jìn)行相應(yīng)的保護(hù)操作。
操作流程:
1)、系統(tǒng)啟動(dòng)后啟動(dòng)PVD,并開(kāi)啟相應(yīng)的中斷。
PWR_PVDLevelConfig(PWR_PVDLevel_2V8); // 設(shè)定監(jiān)控閥值
PWR_PVDCmd(ENABLE); // 使能PVD
EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD連接到中斷線(xiàn)16上
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中斷模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Raising;//電壓低于閥值時(shí)產(chǎn)生中斷
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中斷線(xiàn)
EXTI_Init(&EXTI_InitStructure); // 初始
EXTI_InitStructure.EXTI_Trigger的賦值可選項(xiàng):
EXTI_Trigger_Rising---表示電壓從高下降到低于設(shè)定閥值時(shí)產(chǎn)生中斷;
EXTI_Trigger_Falling---表示電壓從低上升到高于設(shè)定閥值時(shí)產(chǎn)生中斷;
EXTI_Trigger_Rising_Falling---表示電壓上升或下降越過(guò)設(shè)定閥值時(shí)都產(chǎn)生中斷。
2)、當(dāng)工作電壓低于設(shè)定閥值時(shí),將產(chǎn)生PVD中斷,在中斷程序中進(jìn)行相應(yīng)的處理:
void PVD_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line16);
…… // 用戶(hù)添加緊急處理代碼處
}