今天在寫外部中斷的程序的時候,發現中斷特別容易受到干擾,我把手放在對應的中斷引腳上,中斷就一直觸發,沒有停過。經過一天的學習,找到了幾個解決方法,所以寫了這篇筆記。如果你的中斷也時不時會誤觸發,可以對照找一下原因。
1,上下拉
中斷的外圍電路,該上拉的就上拉,該下拉就下拉,如下圖:
圖中的BAT6_#CHRG和BAT6_#DONE是連接到MCU的2個中斷引腳,其中R183已經是上拉3.3V了,D63和D64用于指示,并沒有任何作用。除了上圖的上拉,還需要一個對地的電容下拉,接到GND,這樣就可以讓信號沒有毛刺。
2,中斷延遲檢測
在觸發中斷之后,延遲一段時間,然后去處理。個人認為不好,中斷的好處就是實時性和優先級,現在在中斷里面加Delay函數,不是和中斷的初衷相悖嗎?
? ?
3,清除中斷標志位或者開關中斷源
網上有部分人也說,清除中斷或者開關中斷源,這樣就可以釋放中斷,把中斷“趕”出去,等下次中斷,再讓它“進”來,但是STM32的Cortex-M內核有一個問題,中斷標志位清除之后,并不是馬上清除,而是要等一會,這就導致清除標志位的方法不太可行,只能去開關中斷源了。
4,施密特滯留器
這是網上上比較靠譜的一種方法,將施密特接到中斷之后,MCU之前,保證進入中斷的信號都是經過“滯留”的。施密特觸發器分為兩種類型,即反相施密特觸發器和同相施密特觸發器。反相施密特觸發器可以定義為一個輸出元件連接到運算放大器的正端。類似地,同相施密特觸發器可以定義為輸入信號在運算放大器的負端給出。
下圖是反向施密特觸發器的輸入和輸出的電壓波形關系,其中輸入也不一定是正弦函數,有可能是三角波甚至是方波,反正輸出的電壓是通過閾值來判斷的。
使用NE555的施密特觸發器電路圖如下所示,下面的電路可以用基本的電子元件組成,但NE555是這個電路中必不可少的元件。NE555的兩個引腳(例如引腳4和引腳8)都與VCC電源相連。兩腳(如引腳2和引腳6)短接,通過電容將輸入相提供給這些腳。
在上圖中,電阻R1和R2形成的分壓器提供外部偏置電壓(VCC/2) ,閾值為1/3VCC和2/3VCC。
-
電子元件
+關注
關注
94文章
1361瀏覽量
56536 -
中斷
+關注
關注
5文章
898瀏覽量
41497 -
外部中斷
+關注
關注
1文章
131瀏覽量
15824
發布評論請先 登錄
相關推薦
評論