stm32 外部中斷 按鍵的誤觸發

2021-09-19 09:24:21 字數 903 閱讀 2430

最近在除錯按鍵作為外部中斷exti進行觸發動作,發現每次按鍵按下和按鍵抬起都會多次進入中斷函式,造成程式不穩定,經過反覆除錯和查閱資料,最後終於已經把這個問題解決,現在總結一下:

1、exti重複配置兩次導致誤觸發中斷的問題

如果重複兩次配置exti的話,由於第一次已經開啟中斷,當進行第二次配置中斷的時候,會把中斷引腳首先配置成預設引腳,然後在配置成目的引腳,這樣由於預設引腳是低電平,所以在切換的過程中就會進入一次中斷!!具體請參見:

2、stm32f401 外部中斷誤觸發問題

現象:除錯stm32f411低功耗的時候,使用的pa1做個喚醒源,發現在沒有觸發exti的時候,mcu居然被喚醒。

原因:pa1配置成exti(上拉輸入),經常被誤觸發

解決方式:將pa1配置成浮空輸入(gpio_pupd_nopull),並且外部上拉乙個4.7k電阻,就不會誤觸發了。

這種bug的原因一直沒有搞清,先記下省的以後就忘記了,猜測可能是stm32晶元bug。

具體參見:

注:我用的是stm32f429,沒有發現這個bug,但是記錄下來作為開拓思路的一種方法。

3、stm32外部中斷,exti_clearitpendingbit,先清和後清的區別

前面清的話,如果下一次中斷在該次中斷退出前到來,那麼退出該次中斷後,會馬上進入下一次中斷,後面清的話,在該次中斷退出前到來的中斷就會被忽略,這裡後到來的中斷,指的是同樣的中斷

由於按鍵抖動一般在ms量級,而中斷服務程式一般都是us量級,因此對於按鍵防抖來說,前面清和後面清影響不大,但是為了保險起見,還是在中斷函式的後面清比較好。

4、進入中斷之後失能exti中斷

這種方式最終解決了我的按鍵防抖問題,大體思路就是:進入中斷之後立即失能中斷,等處理完響應的操作之後,在使能中斷,這樣的話當第一次進入中斷之後不會再次進入中斷,直到再次使能中斷之後。

STM32外部中斷

一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...

stm32外部中斷

外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...

stm32外部中斷

好久沒玩微控制器了,最近閒著沒事想拿出來玩玩,沒想到乙個stm32的外部中斷讓我花費了兩天時間,好的的挫折啊!終於下午除錯成功,下面來說一下我的除錯之路吧!硬體就是兩個按鍵,四個led,led事共陽極接法,按鍵一端接地一端接gpio口,通過按鍵中斷控制led。程式寫好以後發現始終無法進入中斷,開始查...