STM32F4XX NVIC中斷優先順序理解

2021-10-10 18:07:32 字數 1379 閱讀 6978

在stm32的開發中我們時常會用到中斷,但是stm32的中斷源繁多,也很容易出錯,所以反覆學習nvic中斷優先管理很有必要。

cm4 核心支援 256 個中斷,其中包含了 16 個核心中斷和 240 個外部中斷,並且具有 256 級的可程式設計中斷設定。但stm32f407 並沒有使用 cm4 核心的全部東西,而是只用了它的一部分。

stm32f4xx 則總共有 101 個中斷,包括 10 個核心中斷和 91 個可遮蔽中斷(外部中斷),具有 16 級可程式設計的中斷優先順序,而我們常用的就是這 91 個可遮蔽中斷。

ps:這裡的外部中斷是除了核心中斷以外的中斷。

stm32f4xx 將中斷分為 5 個組,組 0~4。

該分組的設定是由 scb->aircr 暫存器的 bit10-8來定義的。

ip八位暫存器只有ip[90]~ip[0]在使用,並且只有高四位用來設定搶占和響應優先順序。這裡也就對應了stm32f4xx只有16級可程式設計的中斷優先順序。

關於搶占優先順序和響應優先順序的理解如圖所示:

情況一:在同時發生中斷時,因為搶占優先順序一樣,響應優先順序數值越低越優先所以:優先順序的情況為 中斷1>中斷2>中斷3;

但是在中斷2/3在執行的時候,中斷1無法打斷,只有中斷2/3執行完後才會執行中斷1。

情況二:在同時發生中斷時,搶占優先順序數值越低越優先所以:優先順序的情況為 中斷1>中斷2>中斷3;

在中斷2/3在執行的時候,中斷1可以打斷,然後執行完中斷1在返回執行中斷2/3。

最後我們總結一下中斷優先順序設定的步驟:

1、系統執行開始的時候設定中斷分組。確定組號,也就是確定搶占優先順序和響應優先順序的 分配位數。在檔案 stm32f4xx_hal.c

內部定義函式 hal_init 中有呼叫hal_nvic_prioritygroupconfig 函式進行相關設定,所以我們只需要修改hal_init 內部對中斷優先順序分組設定即可。

2、 設定單個中斷的中斷優先級別和使能相應中斷通道, 使用到的函式主要為 hal_nvic_setpriority 和hal_nvic_enableirq。

ps:具體可以參照官方的例程。

STM32F4外部中斷設定

c void mpuintinit void void mpu exit it handler h define mpu exit gpio gpioa define mpu exit gpio pin gpio pin 1 define mpu exit rccperiph rcc ahb1per...

STM32F4中斷總結

使能syscfg時鐘 只要我們使用到外部中斷,就必須開啟syscfg時鐘,因為要用到相關暫存器如配置gpio與中斷線的對映關係 apb2上 設定io口與中斷線的對映關係,syscfg extilineconfig 初始化線上中斷,設定觸發條件等,exti init 配置中斷分組 nvic 並使能中斷...

STM32F4 NVIC中斷配置(二)

使中斷必須進行中斷優先順序分組配置 nvic prioritygroupconfig 優先順序分組 優先順序分組 主優先順序 搶占優先順序 子優先順序 響應優先順序 描述nvic prioritygroup 0 00 15 主 0bit,子 4bit nvic prioritygroup 1 0 1...