stm32共用外部中斷線問題小結;不同的端口同一pin;不同pin同一個端口;幾個pin共用服務函數等

1.問題來源:

stm32內部資源有限,因此產生了很多共用資源,其中外部中斷也是其中之一。外部中斷的共用資源主要包括:

(1)不同端口、同一pin口,共用一箇中斷線:如PA1、PB1、PC1共用外部中斷線1——EXTI_Line1;

(2)不同pin口、同一端口:這個都不用說,PA1、PA2、PA3這些共用的是同一個端口寄存器之類的;

(3)同一pin口共用一箇中斷線,但16箇中斷線卻只共用7箇中斷服務函數:其中中斷線EXTI_Line0-4獨立擁有一箇中斷服務,中斷線5-9共用一箇中斷服務函數,中斷線10-15共用一箇中斷服務函數。

2.問題提問與解答

(1)可以同時配置PA1和PB1觸發外部中斷嗎?

不可以!配置外部中斷的本質實質配置的是中斷線,PA1、PB1、PC1等等同一pin口的配置只是選擇了中斷線信號的來源,你把PA1搭到EXTI_Line1上,那麼PB1、PC1等等剩餘的同一pin口就浮空了;如果你在程序裏先配置了PA1又PB1,那麼最後只有PB1會觸發EXTI_Line1上的中斷,你相當於把PA1這根線先和EXTI_Line1系在一起,又解開,再把PB1和EXTI_Line1系在一起了

(2)可以同時配置PA1和PA2觸發外部中斷嗎?

可以!如果你理解了問題1,問題2 迎刃而解,始終記得外部中斷觸發的本質是觸發EXTI_Line1-15,而EXTI_Line1-15可共用但不可同時用。PA1和PA2在不同的EXTI_Line上,當然可以同時配置。但是配置時記得設置中斷優先級,優先級高的更橫就對了。

(3)可以同時配置PA6和PA8觸發外部中斷嗎?

這個問題對於看完問題2的可能有點懵,不是不同中斷線的可以同時配置嗎?其實這個問題的本質是中斷服務函數的共用。要知道EXTI_Line6和EXTI_Line8是共用一箇中斷服務函數的,那觸發EXTI_Line6和觸發EXTI_Line8不就進同一個中斷服務函數了嗎?那我想實現不同的功能咋辦?其實這個問題很好解決,進服務函數之後,判斷是哪根中斷線觸發的就行:

if(ITStatus EXTI_GetITStatus(EXTI_Line6)){

中斷線6程序+清標誌位6

if(ITStatus EXTI_GetITStatus(EXTI_Line8)){

中斷線8程序+清標誌位8

總結:

1.同一pin口不可同時配置外部中斷

2.不同pin口可以同時配置外部中斷

3.共用中斷服務函數,以中斷標誌位區分

4.外部中斷的本質是某中斷線得到信號觸發,進入對應的中斷服務函數的過程。

5.某一路中斷線只能同時跟一個pin口搭上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章