stm32學習筆記 F1系列中斷優先級管理NVIC

CM3內核支持256箇中斷,其中包含了16個內核中斷和240個外部中斷,並且具有256級的可編程中斷設置。
STM32F1系列並沒有使用CM3內核的全部東西,而是隻用了它的一部分。
STM32F1系列有84箇中斷,包括16個內核中斷和68個可屏蔽中斷,具有16級可編程的中斷優先級。
STM32F103系列上面,又只有60個可屏蔽中斷(在107系列纔有68個)
中斷管理方法:首先,對STM32中斷進行分組,組0~4。同時,對每個中斷設置一個搶佔優先級和一個響應優先級值。

分組配置是在寄存器SCB->AIRCR中配置:

*********AIRCR[10:8]********IP bit[7:4]分配情況**************分配結果


0 ***************111********************0:4***************0位搶佔優先級,4位響應優先級
1 ***************110********************1:3***************1位搶佔優先級,3位響應優先級
2 ***************101********************2:2***************2位搶佔優先級,2位響應優先級
3 ***************100********************3:1***************3位搶佔優先級,1位響應優先級

4 ***************011********************4:0***************4位搶佔優先級,0位響應優先級


搶佔優先級 & 響應優先級區別:
1>高優先級的搶佔優先級是可以打斷正在進行的低搶佔優先級中斷的。
2>搶佔優先級相同的中斷,高響應優先級不可以打斷低響應優先級的中斷。
3>搶佔優先級相同的中斷,當兩個中斷同時發生的情況下,哪個響應優先級高,哪個先執行。

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


中斷優先級設置步驟
1>系統運行後先設置中斷優先級分組。調用函數:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);// 整個系統執行過程中,只設置一次中斷分組。
2>針對每個中斷,設置對應的搶佔優先級和響應優先級:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
3>如果需要掛起/解掛,查看中斷當前激活狀態,分別調用相關函數即可。


typedef struct
{
  uint8_t NVIC_IRQChannel;                                                  //設置中斷通道
  uint8_t NVIC_IRQChannelPreemptionPriority; //設置響應優先級
  uint8_t NVIC_IRQChannelSubPriority;                              //設置搶佔優先級
  FunctionalState NVIC_IRQChannelCmd;                        //使能

} NVIC_InitTypeDef;


例:
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寄存器



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章