STM32 中斷 優先順序設定

2021-06-19 09:57:50 字數 2396 閱讀 2643

stm32中斷——優先順序設定**)

記性老差,前邊熟悉的東西,轉眼又忘了。今又翻開以前的筆記,重溫記錄如下(參考**記不清楚了):

(一)中斷優先順序概念

stm32(cortex-m3)中有兩個優先順序的概念——搶占式優先順序響應優先順序,有人把響應優先順序稱作'亞優先順序'或'副優先順序',每個中斷源都需要被指定這兩種優先順序。

(二)中斷響應次序

(1)具有高搶占式優先順序的中斷可以在具有低搶占式優先順序的中斷處理過程中被響應,即中斷巢狀

,或者說高搶占式優先順序的中斷可以巢狀低搶占式優先順序的中斷。

(2)當兩個中斷源的搶占式優先順序相同時,這兩個中斷將沒有巢狀關係,當乙個中斷到來後,如果正在處理另乙個中斷,這個後到來的中斷就要等到前乙個中斷處理完之後才能被處理。

(3)如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先順序高低來決定先處理哪乙個

;如果他們的搶占式優先順序和響應優先順序都相等,則根據他們在中斷表中的排位順序決定先處理哪乙個。

(三)中斷的優先順序

在cortex-m3中定義了8個位元位用於設定中斷源的優先順序,這8個位元位可以有8種分配方式,如下:

所有8位用於指定響應優先順序

最高1位用於指定搶占式優先順序,最低7位用於指定響應優先順序

最高2位用於指定搶占式優先順序,最低6位用於指定響應優先順序

最高3位用於指定搶占式優先順序,最低5位用於指定響應優先順序

最高4位用於指定搶占式優先順序,最低4位用於指定響應優先順序

最高5位用於指定搶占式優先順序,最低3位用於指定響應優先順序

最高6位用於指定搶占式優先順序,最低2位用於指定響應優先順序

最高7位用於指定搶占式優先順序,最低1位用於指定響應優先順序

cortex-m3允許具有較少中斷源時使用較少的暫存器位指定中斷源的優先順序,因此stm32把指定中斷優先順序的暫存器位減少到4位,這4個暫存器位的分組方式如下:

第0組:所有4位用於指定響應優先順序

第1組:最高1位用於指定搶占式優先順序,最低3位用於指定響應優先順序

第2組:最高2位用於指定搶占式優先順序,最低2位用於指定響應優先順序

第3組:最高3位用於指定搶占式優先順序,最低1位用於指定響應優先順序

第4組:所有4位用於指定搶占式優先順序

(四)具體設定

可以通過呼叫stm32的韌體庫中的函式nvic_prioritygroupconfig()選擇使用哪種優先順序分組方式,這個函式的引數有下列5種:

nvic_prioritygroup_0 => 選擇第0組

nvic_prioritygroup_1 => 選擇第1組

nvic_prioritygroup_2 => 選擇第2組

nvic_prioritygroup_3 => 選擇第3組

nvic_prioritygroup_4 => 選擇第4組

(五)舉例

接下來就是指定中斷源的優先順序,下面以乙個簡單的例子說明如何指定中斷源的搶占式優先順序和響應優先順序:

// 選擇使用優先順序分組第1組

nvic_prioritygroupconfig(nvic_prioritygroup_1);

// 使能exti0中斷

nvic_initstructure.nvic_irqchannel = exti0_irqchannel;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 1; // 指定搶占式優先級別1

nvic_initstructure.nvic_irqchannelsubpriority = 0; // 指定響應優先級別0

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

// 使能exti9_5中斷

nvic_initstructure.nvic_irqchannel = exti9_5_irqchannel;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0; // 指定搶占式優先級別0

nvic_initstructure.nvic_irqchannelsubpriority = 1; // 指定響應優先級別1

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

(六)注意事項

1)如果指定的搶占式優先級別或響應優先級別超出了選定的優先順序分組所限定的範圍,將可能得到意想不到的結果;

2)搶占式優先級別相同的中斷源之間沒有巢狀關係;

3)如果某個中斷源被指定為某個搶占式優先級別,又沒有其它中斷源處於同乙個搶占式優先級別,則可以為這個中斷源指定任意有效的響應優先級別。

stm32中斷優先順序

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

stm32中斷優先順序 STM32中斷系統

stm32 中斷非常強大,幾乎每個外設都可以產生中斷,因此這裡我們單獨使用一章來介紹它,為後面介紹外設中斷做鋪墊。學習本章可以參考 stm32f10x中文參考手冊 9 中斷和事件章節,cortex m3 權威指南 中文 chpt08 nvic與中斷控制章節。中斷概念 在學習 51 微控制器時,我們就...

stm32 中斷優先順序配置

一 中斷優先順序概念 stm32 cortex m3 中有兩個優先順序的概念 搶占式優先順序和響應優先順序,有人把響應優先順序稱作 亞優先順序 或 副優先順序 每個中斷源都需要被指定這兩種優先順序。二 中斷響應次序 1 具有高搶占式優先順序的中斷可以在具有低搶占式優先順序的中斷處理過程中被響應,即中...