STM32學習筆記 五 NVIC

2021-10-01 14:33:30 字數 2116 閱讀 9423

三、中斷程式設計

f407在核心水平上搭載了乙個異常響應系統,支援為數眾多的系統異常和中斷,其中系統異常有10個,中斷有82個。

nvic是巢狀向量中斷控制器,控制著整個晶元中斷相關的功能,它跟核心緊密耦合,是核心裡面的乙個外設。

在配置中斷的時候一般只用iser、icer和ip這三個暫存器,iser用來使能中斷,icer用來失能中斷,ip用來設定中斷的優先順序。

nvic有乙個專門的中斷優先順序暫存器nvic_iprx,來配置外部中斷的優先順序,ipr寬度為8bit,原則上每個外部中斷可配置的優先順序為0-255,數值越小,優先順序越高。

f407中只使用了高4位,bit[7:4]

表達優先順序的這4bit,又被分組成搶占優先順序子優先順序

搶占優先順序高優先執行,

搶占優先順序相同,子優先順序高的優先執行

搶占優先順序和子優先順序都相同,比較硬體中斷編號,編號越小,優先順序越高。

別的地方看到的乙個結論:搶占優先順序高中斷可以打斷搶占優先順序低的中斷。搶占優先順序相同的中斷,子優先順序高的不能打斷子優先順序低的中斷。

優先順序的分組由核心外設 scb 的應用程式中斷及復位控制暫存器 aircr 的prigroup[10:8]位決定, f407 分為了 5 組。

設定優先順序分組可呼叫庫函式nvic_prioritygroupconfig()實現。

/**

* @brief 配置中斷優先順序分組:搶占優先順序和子優先順序

* @param nvic_prioritygroup: 特定的優先順序分組

* 引數如下:

* @arg nvic_prioritygroup_0: 0 bits for pre-emption priority

* 4 bits for subpriority

* @arg nvic_prioritygroup_1: 1 bits for pre-emption priority

* 3 bits for subpriority

* @arg nvic_prioritygroup_2: 2 bits for pre-emption priority

* 2 bits for subpriority

* @arg nvic_prioritygroup_3: 3 bits for pre-emption priority

* 1 bits for subpriority

* @arg nvic_prioritygroup_4: 4 bits for pre-emption priority

* 0 bits for subpriority

* @note 如果優先順序分組為0,則搶占優先順序就不存在了,優先順序就全部由子優先順序控制

* @retval none

*/void

nvic_prioritygroupconfig

(uint32_t nvic_prioritygroup)

系統初始化時設定中斷優先順序分組:nvic_prioritygroupconfig()

特定外設初始化時,使能外設的某個中斷

初始化nvic_inittypedef結構體(配置中斷優先順序分組,設定搶占優先順序和子優先順序,使能中斷請求)

typedef

struct

nvic_inittypedef;

編寫中斷服務函式

注意:中斷服務的函式名必須跟啟動檔案裡面預先設定的一樣。

編寫中斷服務函式

注意:中斷服務的函式名必須跟啟動檔案裡面預先設定的一樣。

stm32學習筆記 NVIC

這部分講的很好。misc.件其實就是stm32f10x nvic.h,nvic的主要操作都在其中,還包括systick的選擇源操作。core cm3檔案裡面是核心外設,當然包括nvic,l裡面包含nvic的暫存器操作。高達81個中斷,實際上是67stm外設中斷 60個settable,由庫函式int...

stm32之NVIC的使用

nvic nested vectored interrupt controller 巢狀向量中斷控制器 nvic主要用於對一些中斷的處理,在stm32中,中斷服務程式統一放在乙個 stm32f10x it.c檔案裡,這個檔案裡開始只放了一些系統異常的介面,如果我們要寫一些自己的普通的中斷函式,就要自...

stm32的NVIC是什麼?

nvic的全稱是nested vectoredinterrupt controller,即巢狀向量中斷控制器。對於m3和m4核心的mcu,每個中斷的優先順序都是用暫存器中的8位來設定的。8位的話就可以設定2 8 256級中斷,實際中用不了這麼多,所以晶元廠商根據自己生產的晶元做出了調整。比如st的s...