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