STM32中斷優先順序--學習心得
剛開始學習STM32微控制器時,對中斷優先順序的規則不是很明白,通過今天的學習,對這方面的內容有了新的瞭解,記錄下來以便日後檢視。
首先說一下STM32的中斷:
STM32有84箇中斷,包括16個核心中斷和68個可遮蔽中斷,具有16級可程式設計的中斷優先順序。
STM32F103系列上面,又只有60個可遮蔽中斷(在107系列才有68個)
中斷的管理方法:
1.首先,對STM32中斷進行分組,組0~4。同時,對每個中斷設定一個搶佔優先順序和一個響應優先順序值。
分組配置是在暫存器SCB->AIRCR中配置:
即設定優先順序分組:void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
2.然後對單個的中斷進行搶佔優先順序和響應優先順序設定:
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暫存器
對於某些剛學習的人來說對設定分組這一措施不太明白其意義,這裡我就說一下我的理解(分組的意義):分組之後,IP的位也就分配完畢了,原本IP就只有4位,一位上有兩種狀態,也就是0和1,2^4 = 16,也就是有16級可程式設計優先順序,分組後,搶佔優先順序的位數和響應優先順序的位數確定,即可配置各個中斷的優先順序,另一方面也說明了,分組之後不要輕易再改變分組,否則設定好的各個中斷搶佔優先順序和響應優先順序就會改變。