STM32F40xx/STM32F41xx的92個中斷里面,包括10個內(nèi)核中斷和82個可屏蔽中斷,具有16級可編程的中斷優(yōu)先級,而我們常用的就是這82個可屏蔽中斷。
那么我們?nèi)绾喂芾?2個外部中斷呢?
首先,對STM32中斷進行分組,組0~4。同時,對每個中斷設置一個搶占優(yōu)先級和一個響應優(yōu)先級值。分組配置在SCB->AIRCR寄存器,如下表:
搶占優(yōu)先級 & 響應優(yōu)先級區(qū)別1.高優(yōu)先級的搶占優(yōu)先級是可以打斷正在進行的低搶占優(yōu)先級中斷的。
2.搶占優(yōu)先級相同的中斷,高響應優(yōu)先級不可以打斷低響應優(yōu)先級的中斷。
3.搶占優(yōu)先級相同的中斷,當兩個中斷同時發(fā)生的情況下,哪個響應優(yōu)先級高,哪個先執(zhí)行。
4.如果兩個中斷的搶占優(yōu)先級和響應優(yōu)先級都是一樣的話,則看哪個中斷先發(fā)生就先執(zhí)行;
5.數(shù)字越小,優(yōu)先級越高
注意:一般情況下,系統(tǒng)代碼執(zhí)行過程中,只設置一次中斷優(yōu)先級分組,比如分組2,設置好分組之后一般不會再改變分組。隨意改變分組會導致中斷管理混亂,程序出現(xiàn)意想不到的執(zhí)行結果。
相關寄存器配置:
1.中斷優(yōu)先級控制的寄存器組:IP[240] ,高4位用來設置搶占和響應優(yōu)先級(根據(jù)分組)
2.中斷使能寄存器組:ISER[8],32位寄存器,每個位控制一個中斷的使能。STM32F40x只有82個可屏蔽中斷,所以只3.使用了其中的ISER[0]~ISER[2]。
4.中斷失能寄存器組:ICER[8],32位寄存器,每個位控制一個中斷的失能。STM32F40x只有82個可屏蔽中斷,所以只5.使用了其中的ICER[0]和ICER[1]。
6.中斷掛起控制寄存器組:ISPR[8],作用:用來掛起中斷
7.中斷解掛控制寄存器組:ICPR[8],作用:用來解除中斷
中斷優(yōu)先級步驟:
1.系統(tǒng)運行后先設置中斷優(yōu)先級分組。
2.針對每個中斷,設置對應的搶占優(yōu)先級和響應優(yōu)先級
3.如果需要掛起/解掛,查看中斷當前激活狀態(tài),分別調(diào)用相關函數(shù)即可。
外部中斷
STM32F4的每個IO都可以作為外部中斷輸入。STM32F4的中斷控制器支持22個外部中斷/事件請求:
EXTI線0~15:對應外部IO口的輸入中斷。
EXTI線16:連接到PVD輸出。
EXTI線17:連接到RTC鬧鐘事件。
EXTI線18:連接到USB OTG FS喚醒事件。
EXTI線19:連接到以太網(wǎng)喚醒事件。
EXTI線20:連接到USB OTGHS(在FS中配置)喚醒事件。
EXTI線21:連接到RTC入侵和時間戳事件。
EXTI線22:連接到RTC喚醒事件。
每個外部中斷線可以獨立的配置觸發(fā)方式(上升沿,下降沿或者雙邊沿觸發(fā)),觸發(fā)/屏蔽,專用的狀態(tài)位。
我們重點講I/O口的外部中斷。16個外部中斷與I/O口映射方式采用下圖方式:
IO口外部中斷在中斷向量表中只分配了7個中斷向量,也就是只能使用7個中斷服務函數(shù)
從表中可以看出,外部中斷線0~4各用一個外部中斷,外部中斷線5~9分配一個中斷向量,共用一個服務函數(shù),外部中斷線10~15分配一個中斷向量,共用一個中斷服務函數(shù)。
外部中斷相關寄存器
1.SYSCFG外部中斷n配置器(總共4個,每個控制4個I/O口):
2.中斷屏蔽寄存器:使能中斷
3.上升沿/下降沿觸發(fā)選擇寄存器:選擇觸發(fā)方式
4.掛起寄存器:將中斷掛起或者取消中斷掛起。
外部中斷的一般步驟:
使能SYSCFG時鐘
初始化IO口為輸入
設置IO口與中斷線的映射關系。
初始化線上中斷,設置觸發(fā)條件等
配置中斷分組(NVIC),并使能中斷
編寫中斷服務函數(shù),清除中斷標志位
11.png(93.91 KB, 下載次數(shù): 0)
12.png(81.7 KB, 下載次數(shù): 0)
13.png(76.95 KB, 下載次數(shù): 0)
14.png(63.84 KB, 下載次數(shù): 0)
15.png(86.29 KB, 下載次數(shù): 0)
16.png(79.59 KB, 下載次數(shù): 0)