1. 程式人生 > >STM32初識——中斷初始化過程(by woody)

STM32初識——中斷初始化過程(by woody)

在庫函式中,配置 GPIO 與中斷線的對映關係的函式 GPIO_EXTILineConfig()來實現的:
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
該函式將 GPIO 埠與中斷線對映起來,使用範例是:
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);


中斷線上中斷的初始化是通過函式 EXTI_Init()實現的。EXTI_Init()函式的定義是:
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
下面我們用一個使用範例來說明這個函式的使用:
EXTI_InitTypeDef EXTI_InitStructure; 
EXTI_InitStructure.EXTI_Line=EXTI_Line4;//1   
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//2
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//3
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//4
EXTI_Init(&EXTI_InitStructure); //根據 EXTI_InitStruct 中指定的引數初始化外設 EXTI 暫存器
//第一個是中斷線的標號,取值範圍為EXTI_Line0~EXTI_Line15
//第二個引數是中斷模式,可選值為中斷 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event
//第三個引數是觸發方式,可以是下降沿觸發 EXTI_Trigger_Falling,上升沿觸發 EXTI_Trigger_Rising,或者任意電平(上升沿和下降沿)觸發EXTI_Trigger_Rising_FallingEXTI_InitStructure.EXTI_LineCmd = ENABLE;
//最後一個引數就是使能中斷線了




設定 NVIC 中斷優先順序
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能按鍵外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶佔優先順序 2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;  //子優先順序 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //中斷優先順序分組初始化


判斷某個中斷線上的中斷是否發生(標誌位是否置位):
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);


清除某個中斷線上的中斷標誌位:
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);


常用的中斷服務函式格式為:
void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2)!=RESET)//判斷某個線上的中斷是否發生
{
中斷邏輯…
EXTI_ClearITPendingBit(EXTI_Line2); //清除 LINE 上的中斷標誌位

}