stm32 中斷非常強大,每個外設都可以產生中斷。
f429 在核心水平上搭載了乙個異常響應系統, 支援為數眾多的系統異常和外部中斷。其中系統異常有 10 個,外部中斷有 91 個。除了個別異常的優先順序被定死外,其它異常的優先順序都是可程式設計的。
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、編寫中斷服務函式
注意:配置中斷優先順序分組一次後就不需要重複配置了,除非需要更改
stm32中斷優先順序 STM32中斷系統
stm32 中斷非常強大,幾乎每個外設都可以產生中斷,因此這裡我們單獨使用一章來介紹它,為後面介紹外設中斷做鋪墊。學習本章可以參考 stm32f10x中文參考手冊 9 中斷和事件章節,cortex m3 權威指南 中文 chpt08 nvic與中斷控制章節。中斷概念 在學習 51 微控制器時,我們就...
STM32中斷巢狀
cortex m3核心支援256個中斷,其中包括16個核心中斷和240個外部中斷,且具有256級的可程式設計中斷設定,而stm32只用了其中一部分。stm32有84個中斷,包括16個核心中斷和68個可遮蔽中斷,具有16級可程式設計中斷優先順序。而我所使用的103系列只有60個可遮蔽中斷。優先順序的判...
STM32 中斷使用
stm32中斷有時候用多了容易亂,特此記錄一下,因為之前一直是m3 m0交叉用,韌體庫有些區別容易弄混,這裡說一下m3外部中斷的配置 步驟 1.將對應的io配置為輸入 2.將io對應的中斷的優先等級用nvic配置好 3.設定好對應io的中斷模式和觸發方式 4.將io所屬的中斷線設為中斷輸入源 1 以...