1. 程式人生 > >STM32 F103 中斷理解

STM32 F103 中斷理解

中斷系統在任何一個處理器中都非常重要。中斷的設計,極大的提高了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暫存器

即初始化完成。


【根據原子哥的講解的理解】