STM32終端優先順序,看過很多感覺這個寫的直白易懂

2021-09-08 14:02:10 字數 1548 閱讀 8809

**野火《零死角玩轉stm32》

一、搶占優先順序和響應優先順序

stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,其屬性編號

越小,表明它的優先級別越高。

搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現巢狀中斷(在執行中斷

服務函式a 的過程中被中斷b 打斷,執行完中斷服務函式b 再繼續執行中斷服務函式

a),搶占屬性由nvic_irqchannelpreemptionpriority 的引數配置。

而響應屬性則應用在搶占屬性相同的情況下,當兩個中斷向量的搶占優先順序相同時,

如果兩個中斷同時到達, 則先處理響應優先順序高的中斷, 響應屬性由

nvic_irqchannelsubpriority 引數配置。例如,現在有三個中斷向量,如下表。

若核心正在執行c 的中斷服務函式,則它能被搶占優先順序更高的中斷a 打斷,由於b

和c 的搶占優先順序相同,所以c 不能被b 打斷。但如果b 和c 中斷是同時到達的,核心

就會首先響應響應優先級別更高的b 中斷。

二、nvic 的優先順序組

在配置優先順序的時候,還要注意乙個很重要的問題,即中斷種類的數量。nvic 只可

以配置16 種中斷向量的優先順序,也就是說,搶占優先順序和響應優先順序的數量由乙個4 位的

數字來決定,把這個4 位數字的位數分配成搶占優先順序部分和響應優先順序部分。有5 組分

配方式:

 第0 組: 所有4 位用來配置響應優先順序。即16 種中斷向量具有都不相同的響應優先

級。 第1 組:最高1 位用來配置搶占優先順序,低3 位用來配置響應優先順序。表示有2 種

級別的搶占優先順序(0 級,1 級),有8 種響應優先順序,即在16 種中斷向量之中,有

8 種中斷,其搶占優先順序都為0 級,而它們的響應優先順序分別為0~7,其餘8 種中斷向

量的搶占優先順序則都為1 級,響應優先級別分別為0~7。

 第2 組:2 位用來配置搶占優先順序,2 位用來配置響應優先順序。即4 種搶占優先

級,4 種響應優先順序。

 第3 組:高3 位用來配置搶占優先順序,最低1 位用來配置響應優先順序。即有8 種搶占

優先順序,2 種響應2 優先順序。

 第4組:所有4 位用來配置搶占優先順序,即nvic 配置的16 種中斷向量都是只有

搶占屬性,沒有響應屬性。

要配置這些優先順序組,可以採用庫函式nvic_prioritygroupconfi g(),可輸入的引數為nvic_prioritygroup_0 ~ nvic_prioritygroup_4,分別為以上介紹的5 種分配組。

於是,有讀者覺得疑惑了,如此強大的stm32,所有gpio都能夠配置成外部中斷,usart、adc 等外設也有中斷,而nvic 只能配置16 種中斷向量,那麼在某個工程中使用超過16 個中斷怎麼辦呢?注意nvic 能配置的是16 種中斷向量,而不是16 個,當工程中有超過16 個中斷向量時,必然有兩個以上的中斷向量是使用相同的中斷種類,而具有相同中斷種類的中斷向量不能互相巢狀。

STM32優先順序分組,搶占優先順序與響應優先順序詳解

nvic nested vectored interrupt controller 巢狀向量中斷控制器 一.優先順序分組 對中斷源進行分組,每組有乙個搶占優先順序和響應優先順序。上面的理解是錯誤的,事實上,所有中斷源都是乙個組。這個操作應該稱之為設定中斷優先順序的控制模式 控制組別 清楚地說是 這裡...

stm32中斷優先順序

cm3 核心支援 256 個中斷,stm32 並沒有使用 cm3 核心的全部只用了它的一部分。stm32 有 84 個中斷,包括 16 個核心中斷和 68 個可遮蔽中斷,stm32f103 系列上面只有 60 個 107 系列才有 68 個 下面針對stm32f103 系列說明。與 nvic 相關的...

stm32的中斷優先順序介紹

一 搶占優先順序和響應優先順序 stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,其屬性編號 越小,表明它的優先級別越高。搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現巢狀中斷 在執行中斷 服務函式a 的過程中被中斷b 打斷,執行完中斷服務函式b 再繼續執行中斷服務函式 ...