當(dāng)前位置:首頁 > 公眾號精選 > 工程師看海
[導(dǎo)讀]▼關(guān)注公眾號:工程師看海▼前言有時在一些應(yīng)用中,我們需要檢測系統(tǒng)是否掉電了,或者要在掉電的瞬間需要做一些處理。STM32就有這樣的掉電檢測機制——PVD(ProgrammableVoltageDetecter),即可編程電壓檢測器。通過PVD我們可以設(shè)定一個基準(zhǔn)電壓,當(dāng)芯片的供電...

前言



有時在一些應(yīng)用中,我們需要檢測系統(tǒng)是否掉電了,或者要在掉電的瞬間需要做一些處理。STM32就有這樣的掉電檢測機制——PVD(Programmable Voltage Detecter),即可編程電壓檢測器。通過PVD我們可以設(shè)定一個基準(zhǔn)電壓,當(dāng)芯片的供電電壓高于或低于該基準(zhǔn)電壓時便產(chǎn)生PVD中斷,我們可以在PVD中斷里做一些處理。




PVD介紹



本文以STM32F1x為例,來說明PVD的使用。



用戶可以利用PVD對VDD電壓與電源控制寄存器(PWR_CR)中的PLS[2:0]位進行比較來監(jiān)控電源,這幾位選擇監(jiān)控電壓的閥值。



通過設(shè)置PVDE位來使能PVD。電源控制/狀態(tài)寄存器(PWR_CSR)中的PVDO標(biāo)志用來表明VDD是高于還是低于PVD的電壓閥值。



該事件在內(nèi)部連接到外部中斷的第16線,如果該中斷在外部中斷寄存器中是使能的,該事件就會產(chǎn)生中斷。當(dāng)VDD下降到PVD閥值以下和()當(dāng)VDD上升到PVD閥值之上時,根據(jù)外部中斷第16線的上升/下降邊沿觸發(fā)設(shè)置,就會產(chǎn)生PVD中斷。例如,這一特性可用于用于執(zhí)行緊急關(guān)閉任務(wù)。






由PLS[2:0]的介紹可以發(fā)現(xiàn)PVD的電壓閾值共有8個等級,實際使用時可根據(jù)自己的實際情況進行選擇。






對于軟件編程中具體如何實現(xiàn)可以自行編寫相關(guān)代碼,也可關(guān)注【玩轉(zhuǎn)單片機與嵌入式】公眾號,在后臺獲取相關(guān)代碼。



PVD的作用



在實際做產(chǎn)品/項目的過程中,可能大家對PVD的作用會忽視掉,下面列舉PVD的作用:



01記錄設(shè)備掉電時間



這個很好理解,可能業(yè)務(wù)上就有這個需求,或者可以利用這一點來完成低功耗設(shè)備的待機時長測試。




02通知其他處理離線



假如設(shè)備中有由電池供電的MCU1和由鋰電池供電的MCU2,MCU1的部分功能可能需要MCU2來完成,MCU1需要知道MCU2是否離線(因為鋰電池可拔插,可能隨時被拔)。這種情況就可以在MCU2上利用PVD來通知MCU1。通知的方式有很多,例如串口直接通知另一方自己將要斷電了。


PS:當(dāng)然也可通過MCU2監(jiān)聽MCU1的電源來實現(xiàn)。



03防止掉電過程中程序跑飛



小編在之前設(shè)計的一款產(chǎn)品有一定的概率會出現(xiàn)程序丟失的情況,最初懷疑競爭對手惡意破壞或競爭對手嘗試讀取程序?qū)е鲁绦蜃詣硬脸?/span>




后來經(jīng)過實際測試發(fā)現(xiàn):由于設(shè)備電壓降落較慢,下電時間較長(約20ms)。在下電過程中電壓較低/電壓不穩(wěn)定時PC指針亂跑(即所謂的程序跑飛),正好PC指向了代碼中擦除Flash的位置。(設(shè)備進行ISP程序升級需要將自身的Flash擦除寫入新數(shù)據(jù))。




后來最終的解決方案為:在代碼中增加PVD功能,在PVD中斷中進行軟件復(fù)位,保證程序不跑飛。


---The end---





本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉