STM32學習筆記6 --------- NVIC中斷優先級管理

CM3內核支持256箇中斷,其中包含了16個內核中斷和240個外部中斷,並且具有256級的可編程中斷設置。但是STM32並沒有使用CM3內核的全部東西,而是隻用了它的一部分。STM32有84箇中斷,包括16個內核中斷和68個可屏蔽中斷,具有16級可編程的中斷優先級。在STM32F103系列上,只有60個(在107系列纔有68個)。

在這裏插入圖片描述

搶佔優先級的級別高於響應優先級,而數值越小所代表的優先級就越高。

注意:第一,如果兩個中斷的搶佔優先級和響應優先級都是一樣的話,則看哪個中斷先發生就先執行;

第二,高搶佔優先級是可以打斷正在進行的低搶佔優先級中斷。而搶佔優先級相同的中斷,高響應優先級不可以打斷低響應優先級的中斷

NVIC中斷管理函數主要在misc.c文件裏面

中斷優先級分組函數NVIC_PriorityGroupGonfig

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

//eg:分組範圍爲0~4,假設設置整個系統的中斷優先級分組值爲2
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//這樣就確定了一共爲"2位搶佔優先級, 2位響應優先級"。

這個函數在系統中只能被調用一次,一旦分組確定就最好不要更改。

對每個中斷我們如何確定它的搶佔優先級和響應優先級呢?
中斷初始化函數NVIC_Init
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

NVIC_InitTypeDef的成員變量:

typedef struct
{
	uint8_t NVIC_IRQChannel;          //初始化哪個中斷
	uint8_t NVIC_IRQChannelPreemptionPriority;    //定義這個中斷搶佔優先級
	uint8_t NVIC_IRQChannelSubPriority;    //定義子優先級
	FunctionalState NVIC_IRQChannelCmd;   //中斷是否使能
}NVIC_InitTypeDef;

以上是中斷分組分概念以及設定優先級值的方法,每種優先級還有一些關於清除中斷,查看中斷狀態等。

中斷優先級設置的步驟:

  • 系統運行開始的時候設置中斷分組。確定組號,也就是確定搶佔優先級和子優先級的分配位數。調用函數爲NVIC_PriorityGroupConfig();
  • 設置所用到的中斷的中斷優先級別。對每個中斷調用函數爲NVIC_Init();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章