新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32F4——NVIC中斷優先級及外部中斷

        STM32F4——NVIC中斷優先級及外部中斷

        作者: 時間:2016-11-20 來源:網絡 收藏
        NVIC中斷優先級

        一、簡介:

        CM4內核可以支持256個中斷,包括16個內核中斷和240個外部中斷,256級的可編程中斷設置。對于STM32F4沒有用到CM4內核的所有東西,只是用到了一部分,對于STM32F40和41系列共有92個中斷,其中有10個內核中斷和82個可屏蔽中斷,常用的為82個可屏蔽中斷。

        本文引用地址:http://www.104case.com/article/201611/318674.htm

        二、相關寄存器:

        ISER[8]—中斷使能寄存器組,用來使能中斷,每一位控制一個中斷,由于上面已經說明了控制82個可屏蔽的中斷,因此利用ISER[0~2]這三個32位寄存器就夠了。一下的幾個寄存器同理。

        ICER[8]—中斷除能寄存器組,用來消除中斷。

        ISPR[8]—中斷掛起控制寄存器組,用來掛起中斷。

        ICPR[8]—中斷解掛控制寄存器組,用來解除掛起。

        IABR[8]—中斷激活標志寄存器組,對應位如果為1則表示中斷正在被執行。

        IP[240]—中斷優先級控制寄存器組,它是用來設置中斷優先級的。我們只用到了IP[0]~IP[81],每個寄存器只用到了高4位,這4位又用來設置搶占優先級和響應優先級(有關搶占優先級和響應優先級后面會介紹到),而對于搶占優先級和響應優先級各占多少位則由AIRCR寄存器控制,相關設置如下圖所示:

        關于搶占優先級和響應優先級的理解,可以將它們簡單的理解為兩個級別,搶占優先級的級別要比響應優先級的級別高,簡單的理解為一個為長輩的一個為晚輩的,晚輩要讓著長輩,因此搶占優先級的中斷可以打斷響應優先級的中斷,而同級別的中斷就得有個先來后到的了,先來的先執行。

        三、相關庫函數應用

        1、中斷優先級分組函數:void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用來設置設置中斷優先級的分組,就是設置AIRCR寄存器的值。

        2、中斷初始化:NVIC_Init(),用來設置一個中斷的相關參數,包括中斷通道、搶占優先級、響應優先級、通道使能。

        外部中斷

        一、簡介:

        STM32F4的每一個IO都可以作為外部中斷的中斷輸入口,其中斷控制器支持22個中斷/事件請求。其中有:1、EXTI線0~15:外部IO口的輸入中斷。2、線16:PVD輸出。3、線17:RTC鬧鐘事件。4、線18:USB OTG FS喚醒事件。5、線19:以太網喚醒。6、線20:USB OTG HS喚醒事件。7、線21:RTC入侵和時間戳事件。8、線22:RTC喚醒事件。

        二、IO口與中斷線的對應:

        STM32F4IO口遠比16根中斷線要多,如果要對應上就需要多個IO口公用一根中斷線,由于每一組IO口都有16個IO口,則可以做如下對應,即:PA0、PB0、……、PI0,對應中斷線0,依次類推則可以做好相應對應。基于該結構則有了如下的配置過程。

        三、外部中斷配置:

        1、使能IO口時鐘,初始化IO口。

        2、開啟SYSCFG時鐘,設置IO口和中斷線的映射。相關函數為:void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx,uint8_t EXTI_PinSourcex)

        3、初始化線上中斷,設置相關參數。相關函數為:EXTI_Init();相關參數包括:中斷線、中斷模式、中斷觸發條件、中斷線使能。

        4、配置中斷分組。相關函數為:NVIC_Init();相關參數包括:中斷通道、搶占優先級、響應優先級、使能中斷通道。

        5、編寫中斷服務函數。即中斷觸發后執行的相關代碼。與其相關的有兩個函數為:ITStatus EXTI_GetITStatus(uint32_t EXTI_Line),用來判斷線上中斷是否發生。void EXTI_ClearITPendingBit(uint32_t EXTI_Line),用來在中斷函數結束時清除中斷標志位。

        總結:

        有關NVIC的中斷優先級配置和外部中斷的相關結構和配置就介紹到這里,這些介紹是編寫相關代碼的基礎,在理解的基礎上也要去書寫相關的代碼和例程,同時設計的相關中斷觸發事件來多用,用的多了自然會在理論的基礎上得到升華。給自己加油吧!!



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大埔县| 徐汇区| 栾川县| 湄潭县| 许昌市| 札达县| 龙口市| 镇坪县| 乐平市| 元阳县| 应用必备| 舟曲县| 喀喇沁旗| 延寿县| 波密县| 班戈县| 尼勒克县| 高尔夫| 天祝| 尖扎县| 永靖县| 古丈县| 梁山县| 克拉玛依市| 清河县| 博乐市| 信丰县| 安泽县| 华池县| 洛隆县| 交城县| 陆河县| 康平县| 长沙县| 沾益县| 青河县| 乌拉特后旗| 寿光市| 威海市| 东明县| 益阳市|