STM32 中斷非常強大,每個外設都可以産生中斷。
異常類型
F429 在核心水準上搭載了一個異常響應系統, 支援為數衆多的系統異常和外部中斷。其中系統異常有 10 個,外部中斷有 91 個。除了個别異常的優先級被定死外,其它異常的優先級都是可程式設計的。
NVIC
NVIC 是嵌套向量中斷控制器,控制着整個晶片中斷相關的功能,它跟核心緊密耦合,是核心裡面的一個外設。
中斷配置
在配置中斷的時候我們一般隻用 ISER、ICER 和 IP 這三個寄存器,ISER 用來使能中斷,ICER 用來失能中斷,IP 用來設定中斷優先級。
中斷優先級
在 NVIC 有一個專門的寄存器:中斷優先級寄存器 NVIC_IPRx(在 F429 中,x=0…90)
在 F429 中,隻使用了高 4bit,如下所示
用于表達優先級的這 4bit,又被分組成搶占優先級和子優先級。如果有多個中斷同時響應,搶占優先級高的就會 搶占 搶占優先級低的優先得到執行,如果搶占優先級相同,就比較子優先級。如果搶占優先級和子優先級都相同的話,就比較他們的硬體中斷編号,編号越小,優先級越高。
優先級分組
優先級的分組由核心外設 SCB 的應用程式中斷及複位控制寄存器 AIRCR 的PRIGROUP[10:8]位決定,F429 分為了 5 組,具體如下:主優先級=搶占優先級
設定優先級分組可調用庫函數 NVIC_PriorityGroupConfig()實作
搶占優先級與響應優先級
高搶占優先級可以嵌套低搶占優先級的中斷。
兩者搶占優先級相同,那麼無論響應優先級是什麼關系,這兩者都沒有嵌套關系。
假如兩者同時發生,且搶占優先級相同,則根據響應優先級順序執行;加入此時他們的相應優先級也相同,則根據中斷清單表排位順序執行,序号越小,對應優先級越高!
中斷程式設計
在配置每個中斷的時候一般有 3 個程式設計要點:
1、使能外設某個中斷,這個具體由每個外設的相關中斷使能位控制。比如序列槽有發送,完成中斷,接收完成中斷,這兩個中斷都由序列槽控制寄存器的相關中斷使能位控制。
2、初始化 NVIC_InitTypeDef 結構體,配置中斷優先級分組,設定搶占優先級和子優先級,使能中斷請求。
3、編寫中斷服務函數
注意:配置中斷優先級分組一次後就不需要重複配置了,除非需要更改