STM32 F103 中斷理解
阿新 • • 發佈:2018-11-07
中斷系統在任何一個處理器中都非常重要。中斷的設計,極大的提高了CPU的執行效率。
STM32的中斷型別:
如此的多的中斷,我們要如何管理,也就是說如何給這些中斷排序,(兩個中斷同時到來,到底先執行哪一個?或者說一箇中斷正在執行,另一箇中斷突然發生,那突然發生的中斷是否執行呢?)
所以,為了方便管理,STM32對中斷進行了分組,分成4個組,Group 0,1,2,3,4。一共5個組。分配每個組之後,每個組需要設定兩個量,搶佔優先順序和相應優先順序。(也叫 主優先順序,次優先順序)。
對於組別:相應優先順序:0>1>2>....>4
對於同一組:
主優先順序高的先執行,主優先順序相同,次優先順序高的先執行。
在STM32標準庫函式中,分組函式:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}
例如:NVIC_PriorityGroupConfig(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暫存器
即初始化完成。
【根據原子哥的講解的理解】