在單片機的使用中,經常會接觸到復位電路,它是單片機最小系統重要的一個構成部分。同樣它也是非常重要的一部分。
復位就是讓單片機從初始化狀態開始重新運行,即程序從頭開始執行。復位電路設計的好壞,直接影響整個系統是否穩定可靠。復位電路與單片機的RESET/NRST引腳相連,拿STM32系列單片機舉例,當系統正常工作時,如果RESET引腳電壓低于某一閾值,則單片機進入復位狀態。單片機的復位可分為低電平復位和高電平復位,這是由廠家決定的,區分的方式可以看數據手冊,手冊中的復位章節會寫清楚是什么電平復位。單片機的復位可以分為:上電復位、掉電復位、軟件復位、外部手動復位等。
上電復位:單片機每次上電都會給RESET腳一個復位信號,讓單片機從一個固定的相同狀態重新開始工作;
掉電復位:單片機復位引腳電壓低于某一閾值電位時,單片機會進入復位狀態。
軟件復位:程序員執行某一特定的復位指令,來使單片機進行復位,或者當程序在一定時間失去響應的情況下通過看門狗電路控制單片機進行復位。
外部手動復位可以通過一個復位按鍵讓死機或跑飛的程序重新運行。
下面我們一起看一下常見的幾種復位電路。
圖1
圖2
圖1是最常見的低電平上電復位原理圖,我們來分析這個過程,上電前電容兩端電壓為0。上電后,電流從3.3V流經電阻、電容到地,由于電容兩端電壓不能突變,所以上電瞬間RESET腳上電壓也為零,并保持一小段時間低電平,這段時間觸發單片機復位;隨著時間推移,電容兩端電壓太高超過某一閾值電位,復位完成。這個電阻、電容的取值大小影響到復位引腳電平的上升時間(電容的充電時間)。
圖2 手動按鍵復位原理圖,手動按鈕復位在GND和RESET之間接一個按鈕。當人為按下按鈕時, RESET腳就會被GND拉為低電平,使單片機進入復位狀態,如果手不松掉,那么會一直處于復位狀態,直至手松掉之后,復位引腳電平恢復。
ST單片機內部的復位波形,上電的時候VDD大于Vpor并持續一定的時間,單片機脫離復位狀態,掉電的時候Vdd電壓低于Vpdr電壓,單片機進行復位。
軟件復位也分兩種,我們可以使用復位指令,直接使單片機進行復位,另外一種使用單片機內置看門狗,配置啟動看門狗,在主循環程序中每隔一定地時間刷新看門狗,俗稱喂狗。如果一定的時間沒有喂狗,可以認為程序跑飛,則看門狗模塊會復位單片機,內置看門狗又分窗口看門狗和獨立看門狗,區別如下:
時鐘不同
1、獨立看門狗:獨立看門狗使用的是內部專門的 40Khz低速時鐘,不需要使能時鐘操作。
2、窗口看門狗:窗口看門狗使用的是 PCLK1的時鐘,使用前需要先使能時鐘。
中斷不同
1、獨立看門狗:獨立看門狗沒有中斷,超時直接復位。
2、窗口看門狗:窗口看門狗可以在中斷中做復位前的函數操作,比如報錯一些數據等。
使用場景不同
1、獨立看門狗:獨立看門狗一般用于避免程序跑飛或者死循環。
2、窗口看門狗:窗口看門狗避免程序不安預定邏輯執行,比如先于理想環境完成,或者后于極限時間超時。
當然復位衍生出來的電路形態可能不止上述的兩種,但是基本上都是圍繞上述的電路進行變換,最后強調一點,RESET的走線越短越好,復位電路一定要盡可能靠近MCU, 因為復位電路到單片機這一段的走線,可能會引入其他外界因素的干擾,是單片機處于不穩定的狀態。關于復位的內容就跟大家分享到這里,大家有沒有遇到過關于一些復位引起的問題呢?