四、為什麼配置中斷功能時要在apb2中使能afio相關功能?
五、外部中斷bug總結
/*配置中斷分組nvic並使用中斷*/
void
nvic_exit_cfg()
/*gpio初始化*/
void
gpio_exit_cfg()
/*初始化線上中斷,設定觸發條件等*/
void
exti_cfg()
/*exti2中斷處理函式*/
void
exti2_irqhandler
(void
)/*exti9_5中斷處理函式*/
void
exti9_5_irqhandler
(void
)}
stm32的每個io口都可以作為中斷輸入,但是每個中斷線上同一時間只能有乙個外部中斷。要把io口作為外部中斷輸入,有以下幾個步驟:
1)初始化io口為輸入。
這一步設定你要作為外部中斷輸入的io口的狀態,可以設定為上拉/下拉輸入,也可以設定為浮空輸入,但浮空的時候外部一定要帶上拉,或者下拉電阻。否則可能導致中斷不停的觸發。在干擾較大的地方,就算使用了上拉/下拉,也建議使用外部上拉/下拉電阻,這樣可以一定程度防止外部干擾帶來的影響。
2)開啟io口復用時鐘,設定io口與中斷線的對映關係。
stm32的io口與中斷線的對應關係需要配置外部中斷配置暫存器exticr,這樣我們要先開啟復用時鐘,然後配置io口與中斷線的對應關係。才能把外部中斷與中斷線連線起來。
3)開啟與該io口相對的線上中斷/事件,設定觸發條件。
這一步,我們要配置中斷產生的條件,stm32可以配置成上公升沿觸發,下降沿觸發,或者任意電平變化觸發,但是不能配置成高電平觸發和低電平觸發。這裡根據自己的實際情況來配置。同時要開啟中斷線上的中斷,這裡需要注意的是:如果使用外部中斷,並設定該中斷的emr位的話,會引起軟體**不能跳到中斷,而硬體上是可以的。而不設定emr,軟體**就可以進入中斷服務函式,並且硬體上也是可以的。建議不要配置emr位。
4)配置中斷分組nvic,並使能中斷。
這一步,我們就是配置中斷的分組,以及使能,對stm32的中斷來說,只有配置了nvic的設定,並開啟才能被執行,否則是不會執行到中斷服務函式裡面去的。關於nvic的詳細介紹,請參考前面章節。
5)編寫中斷服務函式。
這是中斷設定的最後一步,中斷服務函式,是必不可少的,如果在**裡面開啟了中斷,但是沒編寫中斷服務函式,就可能引起硬體錯誤,從而導致程式崩潰!所以在開啟了某個中斷後,一定要記得為該中斷編寫服務函式。在中斷服務函式裡面編寫你要執行的中斷後的操作。
中斷處理函式是當我們配置的中斷引腳產生中斷後會將中斷訊號線的中斷線標誌暫存器的標誌位置為1,如中斷訊號exti5產生中斷後我們可以使用函式itstatus exti_getitstatus(uint32_t exti_line)獲取指定中斷線的標誌位是否為1,因此在使用部分中斷線是共用乙個中斷處理函式的,可以在函式中判斷中斷訊號線的標誌位是否被置為1了;注意:每次中斷處理完以後需要使用函式void exti_clearitpendingbit(uint32_t exti_line)把中斷的標誌位清除,否則會一直重複地進入中斷處理函式。
與afio 相關的暫存器:
事件控制暫存器(afio_evcr)
復用重對映和除錯i/o 配置暫存器(afio_mapr)
外部中斷配置暫存器1(afio_exticr1)
外部中斷配置暫存器2(afio_exticr2)
外部中斷配置暫存器3(afio_exticr3)
外部中斷配置暫存器4(afio_exticr4)
注意:afio本意是「alternate function io(多功能io口)」,不僅僅針對於埠重對映。只要是對對暫存器 afio_evcr、afio_mapr 和 afio_exticrx 進行讀寫操作前,就要開啟 afio 的時鐘,而不僅僅是重對映的時候才開啟!!!
stm32 學習筆記 – exit外部中斷 按鍵的誤觸發問題.
stm32外部中斷進入不了的原因分析.
stm32在中斷裡使用systick_delay延時引起的一些異常宕機bug分析及其解決方案.
學習筆記 stm32的usb外設概述
一 stm32的usb簡介 1。usb外設實現了usb2.0全速匯流排和apb1匯流排間的介面。2。usb外設支援usb掛起 恢復操作,可以停止裝置時鐘實現低功耗。二 usb主要特徵 1。符合usb2.0全速裝置的技術規範 2。可配置1到8個usb埠 3。crc 迴圈榮譽校驗 生成 檢驗,反向不歸零...
STM32學習筆記之匯流排外設對映
最近在學習使用stm32的外設,在使能外設時鐘時候,經常忘記該外設是掛在哪個匯流排上的,基礎十分不紮實,所以在這裡總結了stm32三條匯流排的外設對映情況。1 ahb匯流排 1 flash 儲存器 2 dma 3 復位和時鐘控制 4 crc 5 乙太網 6 sdio 2 apb2匯流排 1 usar...
STM32基礎學習
最近在學stm32,遇到了一些問題,也解決了一些,望大家糾正。韌體庫外設驅動檔案引入方法 1 加入你要加入的.c檔案 2 在path中加入你的相對應的.h 3 就是一定要將stm32f10x conf.h配置中的相對應的標頭檔案取消注釋。暫存器版本的error l6218e undefined sy...