STM32學習筆記-NVIC中斷知識點


STM32學習筆記-NVIC中斷知識點總結

中斷優先級設置步驟

1. 系統運行后先設置中斷優先級分組

函數:void NVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)

分組配置寄存器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 100 4:0 4位搶占優先級,0位響應優先級

搶占優先級&響應優先級區別:

  • 首先判斷搶占優先級,搶占優先級越高越先響應,高搶占優先級可以打斷低響應優先級
  • 搶占優先級相同的情況下當同時發生時響應優先級越高的先發生,高響應優先級不能打算低響應優先級
  • 都相同的情況下哪個先來哪個先發生

2. 針對每個中斷設置對應的搶占優先級和響應優先級

函數:void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

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

3. 如需掛起/解掛,查看當前激活狀態,分別調用相關函數即可

函數:

  • **static _INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) **
  • **static _INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) **
  • **static _INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) **


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM