藍橋杯嵌入式學習STM32之中斷優先順序分組NVIC

2021-10-02 10:12:43 字數 3079 閱讀 1290

cm3裡面有很多中斷,有更高的優先順序層數。但是stm32f103被閹割了好多。

 cm3核心支援256個中斷,其中包含了16個核心中斷和240個外部中斷,並且具有256級的可程式設計中斷設定。

 stm32並沒有使用cm3核心的全部東西,而是只用了它的一部分。

 stm32有84個中斷,包括16個核心中斷和68個可遮蔽中斷,具有16級可程式設計的中斷優先順序。

 stm32f103系列上面,又只有60個可遮蔽中斷(在107系列才有68個)

先分組。

在暫存器scb->aircr中。

庫函式的話再misc中。

有五個組別。

ip bit[7:4]有四位是恆定的,不過你選的是哪乙個組別,都有24種區別。16剛好對應上面16級可程式設計的中斷優先順序。

分組函式**

在misc檔案裡

void

nvic_prioritygroupconfig

(uint32_t nvic_prioritygroup)

;

#define nvic_prioritygroup_0         ((uint32_t)0x700) 

/*!< 0 bits for pre-emption priority

4 bits for subpriority */

#define nvic_prioritygroup_1 ((uint32_t)0x600)

/*!< 1 bits for pre-emption priority

3 bits for subpriority */

#define nvic_prioritygroup_2 ((uint32_t)0x500)

/*!< 2 bits for pre-emption priority

2 bits for subpriority */

#define nvic_prioritygroup_3 ((uint32_t)0x400)

/*!< 3 bits for pre-emption priority

1 bits for subpriority */

#define nvic_prioritygroup_4 ((uint32_t)0x300)

/*!< 4 bits for pre-emption priority

0 bits for subpriority */

分組設定好之後,設定單個中斷的搶占優先順序和響應優先順序

紅框框裡圈出來的就是沒用到的。

中斷優先順序控制的暫存器組:ip[240]

全稱是:interrupt priority registers

240個8位暫存器,每個中斷使用乙個暫存器來確定優先順序。stm32f10x系列一共60個可遮蔽中斷,使用ip[59]~ip[0]。

每個ip暫存器的高4位用來設定搶占和響應優先順序(根據分組),低4位沒有用到。

(如果全部用到不就是256個優先順序)

中斷使能暫存器組:iser[8]

使能中斷。

32位暫存器,每個位控制乙個中斷的使能。stm32f10x只有60個可遮蔽中斷,所以只使用了其中的iser[0]和iser[1]。

iser[0]的bit0—bit31分別對應中斷0—31。iser[1]的bit0—27對應中斷32—59;

中斷清除使能暫存器組:icer[8]

clean enable

32位暫存器,每個位控制乙個中斷的失能。stm32f10x只有60個可遮蔽中斷,所以只使用了其中的icer[0]和icer[1]。

icer[0]的bit0-bit31分別對應中斷0-31。icer[1]的bit0-27對應中斷32-59;

配置方法跟iser一樣。

啊啊啊,為什麼我不能很掌握英文,要是我會英語我還是現在這個樣子嗎

初始化函式

還是在misc裡

第乙個引數在stm32f10x裡面找。

後面的引數你應該知道的很簡單。

完成後大概這個樣子

nvic_inittypedef   nvic_initstructure;

nvic_initstructure.nvic_irqchannel = usart1_irqn;

//串列埠1中斷

nvic_initstructure.nvic_irqchannelpreemptionpriority=1;

// 搶占優先順序為1

nvic_initstructure.nvic_irqchannelsubpriority =2;

// 子優先順序位2

nvic_initstructure.nvic_irqchannelcmd = enable;

//irq通道使能

nvic_init

(&nvic_initstructure)

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

Pre藍橋杯嵌入式 STM32 學習索引

寫在前面 0 專欄鏈結 1 unkown device 2 移植lcd程式 建立工程 lcd程式分析 3 如何直接使用lcd例程來作為賽場使用的工程 學習目錄 1 led之點燈儀式 2 keyboard 主迴圈掃瞄 外部中斷 3 buzzer之將jtag功能相關引腳對映為普通io afio的使用 4...

STM32 藍橋杯嵌入式LCD顯示的問題

今天在做藍橋杯嵌入式的時候,遇到了乙個非常奇怪的問題,記錄一下 首先如下圖,在while迴圈中,寫了這麼一段led的顯示的程式,開發板的執行狀態達到了期望的執行狀態 然後,我將上面這一段程式寫成乙個函式,如下圖 此時執行程式,開發板的執行狀態和之前的結果就不一樣了,相當於程式卡死在某個地方一樣 最後...

STM32嵌入式開發學習筆記(一)

stm32cubemx是st官方推出的一種stm32設定和初始化c 的生成器。它可以直觀的選擇stm32微控制器 配置微控制器 自動處理引腳衝突 動態設定確定時鐘樹 動態確定引數設定的外圍和中介軟體模式和初始化。cubemx生成的 可以在keil iar gcc等程式設計軟體上面使用。簡單理解,就是...