在STM32中,其每個外設均可以產生中斷。函數
中斷分爲分爲code
①系統異常,內核blog
②外部中斷,外設ip
NVIC(Nested Vector Interrupt Controller ):嵌套向量中斷控制器,屬於內核外設,管理着包括內核片和片上全部外設的終端相關功能。it
core_cm3.h與misc.h有相關函數io
野火指南者內核中斷有10個,外設中斷有60個。配置
由NVIC->IPRx來控制終端
static void EXTI_NVIC_Config(void)
im
{
d3
NVIC_InitTypeDef NVIC_InitStruct;//配置NVIC結構體NVIC_InitTypeDef;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);設置優先級分組
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn ;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//選擇主優先級
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//選擇次優先級
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);//將寫好的結構體寫入到初始化函數中
}
選擇NVIC的中斷線,這裏選擇的是外部中斷0,外部中斷有20個,前16個爲GPIO中斷
EXTI0_IRQn
EXTI1_IRQn
EXTI2_IRQn
EXTI3_IRQn
EXTI4_IRQn
EXTI9_5_IRQn
EXTI15_10_IRQn
配置完NVIC接着配置EXTI_InitTypeDef,NVIC像一箇中斷大門而EXIT就像箇中斷的小門
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //打開時鐘,選擇複用模式
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //設置外部中斷源
EXTI_InitStruct.EXTI_Line = EXTI_Line0;//選擇外部中斷線0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;選擇外部觸發模式
EXTI_InitStruct.EXTI_Trigger =EXTI_Trigger_Rising;選擇上拉沿觸發
EXTI_InitStruct.EXTI_LineCmd = ENABLE;使能
EXTI_Init(&EXTI_InitStruct);