時(shí)鐘失效之后,STM32還能運行?
問(wèn)題
該問(wèn)題由某客戶(hù)提出,發(fā)生在 STM32F103VDT6 器件上。據其工程師講述:在其產(chǎn)品的設計中,STM32 的 HSE 外接 8MHz 的晶體產(chǎn)生振蕩,然后通過(guò) STM32 內部的PLL 倍頻到 72MHz,作為 STM32 的系統時(shí)鐘,驅動(dòng)芯片工作。在 STM32 片外有專(zhuān)用的看門(mén)狗芯片,監控 STM32 的運行。STM32 內部的軟件會(huì )在 STM32 的某個(gè)管腳上產(chǎn)生脈沖來(lái)復位看門(mén)狗。一旦 STM32 沒(méi)有及時(shí)的產(chǎn)生脈沖來(lái)復位門(mén)狗,則看門(mén)狗會(huì )認為 STM32 運行不正常,從而復位 STM32。在對該產(chǎn)品做可靠性測試時(shí),進(jìn)行了對看門(mén)狗監控時(shí)鐘失效能力的測試。測試的方法是:將 HSE 外接的晶體的兩個(gè)端子接地,使其停止振蕩,從而驗證看門(mén)狗能否做出對 STM32 的做出復位動(dòng)作。試驗結果表明,看門(mén)狗沒(méi)有產(chǎn)生復位動(dòng)作。進(jìn)一步測試發(fā)現,STM32 在失效情況下仍在向看門(mén)狗發(fā)送復位脈沖。
調研:
重復測試,確認其所述現象屬實(shí)。檢查軟件代碼,確認其軟件沒(méi)有開(kāi)啟 STM32 的 CSS功能。修改代碼,將 PLL 的二分頻從 STM32 的 MCO 管腳送出,以方便用示波器觀(guān)察。通過(guò)控制晶體的管腳是否接地來(lái)控制 HSE 是否振蕩。當 HSE 正常振蕩時(shí),MCO 送出的信號頻率為 36MHz,當 HSE 停止振蕩時(shí),MCO 送出的信號的頻率在 1.7MHz 附近,如圖(一)所示:
通過(guò)調試器觀(guān)察寄存器 RCC_CFGR 中的 SWS 控制控制位,其值為[10],說(shuō)明此時(shí)的系統時(shí)鐘確實(shí)來(lái)自 PLL 的輸出。
從 STM32F103VD 的數據手冊中查找 PLL 相關(guān)的參數如表(一):
其中,PLL 的輸出頻率范圍是 16MHz – 72MHz。也就是說(shuō),PLL 在處于相位鎖定的狀態(tài)下,可以輸出 16MHz – 72MHz 的時(shí)鐘信號。而當輸入信號頻率過(guò)低而導致輸出信號頻率低于 16MHz 時(shí),將可能處于失鎖的狀態(tài)。在這狀態(tài)下,它的輸出信號的頻率與輸入信號的頻率之間,不一定符合所設定的倍頻與分頻關(guān)系。更確切的說(shuō),不能通過(guò)公式:
得出“輸入信號頻率為零時(shí),輸出信號頻率也為零”這樣的結論。這一點(diǎn)與實(shí)測的結果相吻合。
結論:
STM32 的 PLL 在沒(méi)有輸入信號的情況下,仍能維持在最低的頻點(diǎn)處振蕩,產(chǎn)生輸出。以至,CPU 及其它外設仍能在 PLL 送出的時(shí)鐘的驅動(dòng)下運行。所以,通過(guò)判斷有無(wú)時(shí)鐘來(lái)驅動(dòng) CPU 執行指令的方式來(lái)判斷 HSE 是否失效是行不通的。
處理:
對軟件做如下修改:
1. 在軟件的初始化部分,開(kāi)啟 STM32 的 CSS 功能;
2. 修改 NMI 中斷服務(wù)程序,加入 while(1) 陷阱語(yǔ)句;
開(kāi)啟 CSS 功能后,當 HSE 失效時(shí),STM32 會(huì )自動(dòng)開(kāi)啟 HSI,并將系統時(shí)鐘的來(lái)源切換到HSI 的輸出,同時(shí)產(chǎn)生 NMI 中斷。這樣,程序的流程將停留在 NMI 中而不能產(chǎn)生復位片外的看門(mén)狗的脈沖。當片外看門(mén)狗溢出后,就會(huì )復位 STM32,使其恢復到正常駐的狀。
建議:
STM32 中的 CSS 功能是專(zhuān)門(mén)為檢測和處理 HSE 失效而設計的。但該功能在 STM32 復位后是被禁止的,須要軟件對其使能才會(huì )發(fā)揮作用。當 CSS 單元檢測到 HSE 失效時(shí),它會(huì )使能 HSI,并將系統時(shí)鐘切換到 HSI。同時(shí),它會(huì )關(guān)閉 HSE,如果 PLL 的輸入信號來(lái)自 HSE的輸出,它也會(huì )關(guān)閉 PLL。CSS 單元在做時(shí)鐘調整的同時(shí),也會(huì )產(chǎn)生一個(gè) NMI 中斷請求,和一個(gè)送給高級定時(shí)器的剎車(chē)信號。NMI 中斷請求會(huì )產(chǎn)生一個(gè) NMI 中斷,以便用戶(hù)程序可以在中斷服務(wù)程序中做緊急處理,而剎車(chē)信號則是使高級定時(shí)器進(jìn)入剎車(chē)狀態(tài),以防止由其控制的電機驅動(dòng)橋臂由于失去控制而過(guò)流。用戶(hù)程序可以在 NMI 中斷服務(wù)程序中嘗試恢復 HSE 及 PLL 的功能,也可以使用陷阱讓程序的流程停留在服務(wù)程序中,從而等待看門(mén)狗復位整個(gè)系統。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
穩壓二極管相關(guān)文章:穩壓二極管的作用
電流傳感器相關(guān)文章:電流傳感器原理