STM32F4——NVIC中斷優(yōu)先級(jí)及外部中斷
一、簡(jiǎn)介:
CM4內(nèi)核可以支持256個(gè)中斷,包括16個(gè)內(nèi)核中斷和240個(gè)外部中斷,256級(jí)的可編程中斷設(shè)置。對(duì)于STM32F4沒(méi)有用到CM4內(nèi)核的所有東西,只是用到了一部分,對(duì)于STM32F40和41系列共有92個(gè)中斷,其中有10個(gè)內(nèi)核中斷和82個(gè)可屏蔽中斷,常用的為82個(gè)可屏蔽中斷。
本文引用地址:http://m.butianyuan.cn/article/201611/318674.htm二、相關(guān)寄存器:
ISER[8]—中斷使能寄存器組,用來(lái)使能中斷,每一位控制一個(gè)中斷,由于上面已經(jīng)說(shuō)明了控制82個(gè)可屏蔽的中斷,因此利用ISER[0~2]這三個(gè)32位寄存器就夠了。一下的幾個(gè)寄存器同理。
ICER[8]—中斷除能寄存器組,用來(lái)消除中斷。
ISPR[8]—中斷掛起控制寄存器組,用來(lái)掛起中斷。
ICPR[8]—中斷解掛控制寄存器組,用來(lái)解除掛起。
IABR[8]—中斷激活標(biāo)志寄存器組,對(duì)應(yīng)位如果為1則表示中斷正在被執(zhí)行。
IP[240]—中斷優(yōu)先級(jí)控制寄存器組,它是用來(lái)設(shè)置中斷優(yōu)先級(jí)的。我們只用到了IP[0]~IP[81],每個(gè)寄存器只用到了高4位,這4位又用來(lái)設(shè)置搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)(有關(guān)搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)后面會(huì)介紹到),而對(duì)于搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)各占多少位則由AIRCR寄存器控制,相關(guān)設(shè)置如下圖所示:
關(guān)于搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的理解,可以將它們簡(jiǎn)單的理解為兩個(gè)級(jí)別,搶占優(yōu)先級(jí)的級(jí)別要比響應(yīng)優(yōu)先級(jí)的級(jí)別高,簡(jiǎn)單的理解為一個(gè)為長(zhǎng)輩的一個(gè)為晚輩的,晚輩要讓著長(zhǎng)輩,因此搶占優(yōu)先級(jí)的中斷可以打斷響應(yīng)優(yōu)先級(jí)的中斷,而同級(jí)別的中斷就得有個(gè)先來(lái)后到的了,先來(lái)的先執(zhí)行。
三、相關(guān)庫(kù)函數(shù)應(yīng)用
1、中斷優(yōu)先級(jí)分組函數(shù):void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用來(lái)設(shè)置設(shè)置中斷優(yōu)先級(jí)的分組,就是設(shè)置AIRCR寄存器的值。
2、中斷初始化:NVIC_Init(),用來(lái)設(shè)置一個(gè)中斷的相關(guān)參數(shù),包括中斷通道、搶占優(yōu)先級(jí)、響應(yīng)優(yōu)先級(jí)、通道使能。
外部中斷
一、簡(jiǎn)介:
STM32F4的每一個(gè)IO都可以作為外部中斷的中斷輸入口,其中斷控制器支持22個(gè)中斷/事件請(qǐng)求。其中有:1、EXTI線0~15:外部IO口的輸入中斷。2、線16:PVD輸出。3、線17:RTC鬧鐘事件。4、線18:USB OTG FS喚醒事件。5、線19:以太網(wǎng)喚醒。6、線20:USB OTG HS喚醒事件。7、線21:RTC入侵和時(shí)間戳事件。8、線22:RTC喚醒事件。
二、IO口與中斷線的對(duì)應(yīng):
STM32F4IO口遠(yuǎn)比16根中斷線要多,如果要對(duì)應(yīng)上就需要多個(gè)IO口公用一根中斷線,由于每一組IO口都有16個(gè)IO口,則可以做如下對(duì)應(yīng),即:PA0、PB0、……、PI0,對(duì)應(yīng)中斷線0,依次類推則可以做好相應(yīng)對(duì)應(yīng)?;谠摻Y(jié)構(gòu)則有了如下的配置過(guò)程。
三、外部中斷配置:
1、使能IO口時(shí)鐘,初始化IO口。
2、開(kāi)啟SYSCFG時(shí)鐘,設(shè)置IO口和中斷線的映射。相關(guān)函數(shù)為:void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx,uint8_t EXTI_PinSourcex)
3、初始化線上中斷,設(shè)置相關(guān)參數(shù)。相關(guān)函數(shù)為:EXTI_Init();相關(guān)參數(shù)包括:中斷線、中斷模式、中斷觸發(fā)條件、中斷線使能。
4、配置中斷分組。相關(guān)函數(shù)為:NVIC_Init();相關(guān)參數(shù)包括:中斷通道、搶占優(yōu)先級(jí)、響應(yīng)優(yōu)先級(jí)、使能中斷通道。
5、編寫(xiě)中斷服務(wù)函數(shù)。即中斷觸發(fā)后執(zhí)行的相關(guān)代碼。與其相關(guān)的有兩個(gè)函數(shù)為:ITStatus EXTI_GetITStatus(uint32_t EXTI_Line),用來(lái)判斷線上中斷是否發(fā)生。void EXTI_ClearITPendingBit(uint32_t EXTI_Line),用來(lái)在中斷函數(shù)結(jié)束時(shí)清除中斷標(biāo)志位。
總結(jié):
有關(guān)NVIC的中斷優(yōu)先級(jí)配置和外部中斷的相關(guān)結(jié)構(gòu)和配置就介紹到這里,這些介紹是編寫(xiě)相關(guān)代碼的基礎(chǔ),在理解的基礎(chǔ)上也要去書(shū)寫(xiě)相關(guān)的代碼和例程,同時(shí)設(shè)計(jì)的相關(guān)中斷觸發(fā)事件來(lái)多用,用的多了自然會(huì)在理論的基礎(chǔ)上得到升華。給自己加油吧??!
評(píng)論