STM32NVIC中斷優先順序

2021-10-18 13:24:17 字數 2270 閱讀 3753

cm3核心共支援256個中斷,其中包含了16個核心中斷,240個外部中斷,並且具有256級可程式設計中斷設定。但是stm32並沒有使用cm3核心全部的東西,stm32有84個中斷,其中包含了16個核心中斷,68個可遮蔽中斷,具有16級可變陳的中斷優先順序。

typedef

struct

nvic_type;

暫存器如下:

iser[8]:中斷使能暫存器組。用8個32位暫存器來控制,每個位控制乙個中斷,由於stm32f103的可遮蔽中斷只有60個,所以iser[0]的32個位分別控制中斷0-31,iser[1]的0-27對應中斷32-59.如果要使某個中斷使能,必須要設定iser[i]對應的位為1。

icer[8]:中斷除能暫存器組。其作用和iser相反,如果要將某個中斷停止,可以將該中斷對應的icer位設定為1。

ispr[8]:中斷掛起控制暫存器組。將正在執行的中斷暫存掛起,執行同級或更高階別的中斷,如中斷a正在執行,現設定中斷a對應的ispr位為1,則將中斷a掛起,執行和中斷a優先順序同級或者優先順序高於中斷a的中斷b。

icpr[8]:中斷解掛控制暫存器組。其作用與ispr相反,通過設定1,可以將掛起的中斷繼續執行。

iabr[8]:中斷啟用標誌位暫存器組。所代表中斷的對應位如果為1,則表示該位所對應的中斷正在被執行,這是乙個唯讀暫存器,通過它可以知道當前在執行的中斷是哪乙個,在中斷執行完後由硬體自動清零。

ip[240]:是中斷優先順序控制的暫存器組,ip暫存器組由240個8bit的暫存器組成,每個可遮蔽中斷占用8bit,所以總共可以表示240個可遮蔽中斷。而stm32只用到了其中的前60個。ip[59]ip[0]分別對應中斷590;而每個可遮蔽中斷占用的8bit並沒有全部被利用,只是用了高4位,這4位又分為搶占優先順序和子優先順序(響應優先順序)。搶占優先順序在前,子優先順序在後。

1.高優先順序的搶占優先順序是可以打斷正在進行的低搶占優先順序中斷;

2.搶占優先順序相同的中斷,高響應優先順序不可以打斷低響應的中斷。

3.當兩個搶占優先順序相同的中斷同時發生,那個響應優先順序高,哪個先執行。

4.如果兩個中斷的搶占優先順序和響應優先順序都是一樣的,則看哪個中斷先發生就先執行。

首先,設定中斷優先順序void nvic_prioritygroupconfig(uint32_t nvic_prioritygroup):

例,設定第三組,既搶占優先順序和響應優先順序各兩位:nvic_prioritygroupconfig(nvic_prioritygroup_2);

然後,配置特定中斷void nvic_init(nvic_inittypedef* nvic_initstruct) :

其中其中 nvic_inittypedef 是乙個結構體 :

typedef

struct

nvic_inittypedef;

例:要使能串列埠2的中斷 ,並設定搶占優先順序為1,子優先順序為2

nvic_inittypedef nvic_initstructure;

nvic_initstructure.nvic_irqchannel = usart1_irqn;

//串列埠 2 中斷

nvic_initstructure.nvic_irqchannelpreemptionpriority=1;

// 設定搶占優先順序為 1

nvic_initstructure.nvic_irqchannelsubpriority =2;

// 設定子優先順序位 2

nvic_initstructure.nvic_irqchannelcmd = enable;

// 將其使能

nvic_init

(&nvic_initstructure)

;//根據上面設定的引數初始化 nvic 暫存器

1.設定中斷分組;

c_init(&nvic_initstructure); //根據上面設定的引數初始化 nvic 暫存器

### 總結配置中斷優先順序設定的步驟如下:

1.設定中斷分組;

2.設定所用到的中斷優先順序級別,並使用nvic_init()函式配置。

STM32 NVIC 中斷優先順序管理

這裡以stm32f4系列為例。先簡單介紹下stm32f4的中斷分組,stm32f4將中斷分為5個組,組0 4.該分組的設定是有scb aircr暫存器的bit 10 8來定義的。具體分配關係如下表 假設說組設定為2,那麼此時每個中斷的中斷優先暫存器的高四位中的最高兩位是搶占優先順序,低兩位是響應優先...

STM32 NVIC中斷優先順序的理解

我們在學習stm32中串列埠啊,定時器啊等等,都會遇到設定相應的優先順序。下面來揭下這個神秘的面具。我們知道優先順序有兩種 搶占式優先順序preemptionpriority 和 子優先順序 響應優先順序 subpriority。具有高優先順序的中斷可以在低優先順序正在執行時打斷其執行,然後執行自己...

stm32 NVIC中段優先順序

nvic stm32f103有60個遮蔽中斷 管理辦法 首先對中斷進行分組0 4,在每個中斷設定乙個搶占優先順序和乙個響應優先順序值。在scb aircr中配置 在一般的情況下是設定的是2組,由兩個搶占優先順序和兩個響應優先順序分配。搶占優先順序和響應優先順序區別 1 搶占優先順序高的可以打斷搶占優...