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 上的中斷標志位
}?
}
總結
以上是生活随笔為你收集整理的STM32初识——中断初始化过程(by woody)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 TIMER初始化步骤
- 下一篇: STM32系统时钟默认设置