一、看門狗外設的原理與應用
- 背景說明
隨著單片機的發展,單片機在家用電器、工業自動化、生產過程控制、智能儀器儀表等領域的應用越來越廣泛。然而處于同一電力系統中的各種電氣設備通過電或磁的聯系彼此緊密相連,相互影響,由于運行方式的改變、故障、開關操作等引起的電磁振蕩會波及很多電氣設備。這對我們單片機系統的可靠性與安全性構成了極大的威脅。單片機測控系統必須長期穩定、可靠運行,否則將導致控制誤差加大,嚴重時會使系統失靈,甚至造成巨大損失。因此單片機的抗干擾能力已經成為不容忽視的問題。
- 基本概念
由于單片機在運行的過程經常會受到外部電磁場的干擾,就可能會出現程序“跑飛”,比如出現數據的缺失、導致寄存器中的數據發生變化、程序指針PC指向非法地址........,為了提高程序的可靠性,就提供了看門狗外設,在程序出現由軟件或者硬件導致的未知問題,利用看門狗外設對芯片進行復位,相當于重新運行程序。
看門狗(WatchDog Timer),本質上就是一個定時器電路,一般有一個輸入和一個輸出,輸出端連接到到MCU的RST引腳,當MCU正常工作的時候,每隔一段時間輸出一個信號到看門狗的輸入端,如果超過規定的時間不喂狗(一般在程序跑飛時),看門狗就會給出一個復位信號到MCU,使MCU復位。
- 實現原理
使用看門狗的目的:為了提供程序的可靠性,防止由軟件或者硬件造成的問題的出現。如果想要了解看門狗的資源和特點,可以參考STM32F4中文參考手冊。
- 分類說明
STM32F4系列的芯片提供的兩個看門狗,一個叫做獨立看門狗,一個叫做窗口看門狗。兩個看門狗的使用流程差不多,但是相比于獨立看門狗,窗口看門狗的限制更嚴格。
- 窗口看門狗
- 獨立看門狗
- 內部結構
- 程序設計
思考:如果出現芯片復位的情況,如何判斷是用戶手動完成復位還是由IWDG看門狗復位??
- 喂狗技巧
一種方案是在代碼段進行穿插喂狗,操作起來比較麻煩,另一種方案是在定時器中斷中完成喂狗操作,但是注意中斷請求可能出現嵌套,所以喂狗操作的定時器的中斷的搶占優先級應該是在程序中所有中斷里面是最高。
為了提高程序的可靠性,應該定義一個標志位,應該結合該標志位來判斷程序的運行狀態。
練習:根據看門狗的原理,實現掌握MCU中的窗口看門狗的使用流程,另外,要求在自己的程序中實現看門狗的監測,并對PS2模塊、光敏、溫濕度進行測試,然后把之前學習的外設的程序進行封裝,封裝為xxx.c和xxx.h。