STM32外部中斷總結

 

STM32外部中斷總結

作者:JCY

該文章是學習了STM32後所寫,是對STM32的小小的理解。在文中若有錯誤指出請指正,不勝感激。

STM32有最多68個可屏蔽的中斷通道,有16個可編程的優先級。對於STM32F103ZE芯片,其內部包含了19個邊沿檢測器用來產生中斷或者事件請求。對於外部中斷只用了16個外部觸發輸入線。每一個外部輸入線都能夠被獨立的屏蔽,pending register的寄存器能夠保存輸入線的狀態,這個寄存器不能通過硬件自動清零,必須使用軟件來清零;

外部中斷的內部連接圖如下:

觸發信號通過輸入線進入檢測器,檢測器的功能是可以設置的,就是通過上邊兩個邊沿檢測器即上升沿出發選擇寄存器和下降沿出發選擇寄存器。從圖中就可以看出外部中斷/事件觸發方式有三種即上升沿觸發、下降沿觸發、上升沿和下降沿觸發。在上升沿觸發選擇寄存器和下降沿觸發選擇寄存器中只有低20位有效,每一位各對應一個輸入線。

在內部原理圖當中我們看到有一個兩輸入或門電路,輸入信號可以來自邊沿檢測器輸出,也可以來自軟件中斷/事件寄存器。所以對於STM32要產生中斷或者是事件有可能來自軟件中斷/事件觸發寄存器或者外部輸入信號線。通過改變軟件中斷/事件觸發寄存器的值也是可以向內核請求中斷或者事件,但是使用向軟件中斷/事件觸發寄存器寫1產生中斷的前提是Penging request 寄存器中的相應的位必須是0(向Penging request 寄存器寫1來清零相應的位)。

Pluse generator的右面也有一個與門電路,與門電路的輸出是用來產生事件的。通過內部圖可以看出若用產生事件必須使與門的兩個輸入線爲真,即事件屏蔽寄存器的相應位使能和用軟件或者是硬件請求。所以呀,中斷或者事件的產生與否與會相互的影響,對於同一個輸入通道可以設置爲同時產生中斷或者事件。對於控制中斷或者事件是否使能的寄存器分別是中斷屏蔽寄存器和事件屏蔽寄存器。

設置了上面的寄存器對於產生中斷還是不夠的,你還需要開啓引腳第二功能時鐘,對於AFIO時鐘如何開啓請參考STM32手冊RCC部分。設置需要產生中斷的引腳爲輸入模式(可以爲上拉輸入,下拉輸入,懸浮輸入等!)。每一箇中斷輸入線可以對應幾個引腳,例如PA0PB0......PG0都能夠產生外部中0,但是每次只能由一個來產生中斷,那麼要讓哪一個引腳連接到中斷輸入線上則通過外部中斷配置寄存器了。外部配置寄存器有4個,每個寄存器對應可以配置4個輸入線通道,正好16個。AFIO_EXTICR1的寄存器位圖如下:

每一個通道對應4位,可以對應於GPIO的端口。

在程序中使用中斷,不免會有中斷優先級,STM32將中斷優先級分爲兩組,即搶佔優先級和響應優先級。具體的如何分參考有關手冊,

外不中斷的編寫步驟:

l 確定搶佔優先級和響應優先級如何分組,對於整個芯片的只能使用其中的一組

l 設置引腳爲輸入模式,最好爲懸浮輸入模式。

l 將某一個端口映射到觸發輸入線

l 設置該外部中斷通道的觸發模式

l 使能中斷,設置改中斷的優先級

l 打開引腳第二功能時鐘

備註:對於相應的端口時鐘不需要打開

發佈了42 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章