STM32的外部中断配置及使用
配置1:GPIO;
配置外部中断为输入模式;
配置2:EXTI;
配置外部中断线和触发模式;
配置3:NVIC;
配置外部中断源和中断优先级;
需要注意的是:RCC_APB2Periph_AFIO 时钟必须打开,容易忽略的一点;
1 void EXTI_PORTC_CONFIG(void) 2 { 3 GPIO_InitTypeDef GPIO_InitStructure; 4 EXTI_InitTypeDef EXTI_InitStructure; 5 NVIC_InitTypeDef NVIC_InitStructure; 6 7 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE); 8 9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉11 GPIO_Init(GPIOC, &GPIO_InitStructure);12 13 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;14 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉15 GPIO_Init(GPIOC, &GPIO_InitStructure);16 17 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;18 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉19 GPIO_Init(GPIOC, &GPIO_InitStructure);20 21 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);22 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);23 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);24 25 EXTI_InitStructure.EXTI_Line = EXTI_Line2; 26 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;27 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;28 EXTI_InitStructure.EXTI_LineCmd = ENABLE;29 EXTI_Init(&EXTI_InitStructure);30 31 EXTI_InitStructure.EXTI_Line = EXTI_Line3; 32 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;33 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;34 EXTI_InitStructure.EXTI_LineCmd = ENABLE;35 EXTI_Init(&EXTI_InitStructure);36 37 EXTI_InitStructure.EXTI_Line = EXTI_Line5; 38 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;39 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;40 EXTI_InitStructure.EXTI_LineCmd = ENABLE;41 EXTI_Init(&EXTI_InitStructure);42 43 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;44 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;45 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;46 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;47 NVIC_Init(&NVIC_InitStructure);48 49 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;50 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;51 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;52 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;53 NVIC_Init(&NVIC_InitStructure);54 55 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;56 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;57 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;58 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;59 NVIC_Init(&NVIC_InitStructure);60 }