天天看点

STM32学习笔记——外部中断EXTI

一、EXTI 中断

      PA0,PB0,......PG0  共用一个中断标志 EXT0

      PA1,PB1,......PG1  共用一个中断标志 EXT1

      ...................................

      ...................................

      PA15,PA15,......PG15  共用一个中断标志 EXT15

      疑问:官方库函数有19条EXTI_Line,EXTI_Line0 -- EXTI_Line18,多出来的3条在哪里?

               祥见 EXTI_InitTypeDef.EXTI_Line 段落

二、在NVIC中:

      EXTI0--EXTI4各自有独立的IRQ_Channel,对应的中断服务函数是 void EXTI(n)_IRQHandler(void),(n)=0--4。

      EXTI5--EXTI9共用一个IRQ_Channel,对应的中断服务函数是 void EXTI9_5_IRQHandler(void)。

      EXTI10--EXTI15共用一个IRQ_Channel,对应的中断服务函数是 void EXTI15_10_IRQHandler(void)。

三、如何启用EXTI中断

      1 .启动所需GPIOn_Pin及AFIO的RCC时钟:

           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,RCC_APB2Periph_AFIO,ENABLE);

          !!!千万别忘记启动RCC_APB2Periph_AFIO!!!,否则管脚只能做普通高低电平来用。

      2 .用GPIO_InitStructure(用GPIO_InitTypeDef预先定义一下)设置所需GPIO口的Pin,Speed,Mode,

          然后用GPIO_Init(GPIOn,&GPIO_InitStructure)来启用这些GPIO的Pin。

      3 .用GPIO的中断线控制函数启动指定GPIO的某个Pin

          GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource7);

      4 .初始化中断,类似初始化GPIO

          a)定义一个初始化的结构变量 EXTI_InitTypeDef  EXTI_InitStructure;

             !!!这步应该在函数外预先声明名!!!

          b)输入该结构的成员值:EXTI_Line,EXTI_Mode,EXTI_Trigger,EXTI_LineCmd

          c)用EXTI_Init(&EXTI_InitStructure);完成初始化

          例:

             RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO , ENABLE );

            GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource7);

            EXTI_InitStructure.EXTI_Line = EXTI_Line7;

            EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

            EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

            EXTI_InitStructure.EXTI_LineCmd = ENABLE;

            EXTI_Init(&EXTI_InitStructure);

四、可以用软件模拟一个EXTI中断的产生,命令如下:

          EXTI_GenerateSWInterrupt(EXTI_Line7);//产生EXTI_Line7的中断。

五、对应的中断服务函数在 "stm32f10x_it.c" 中

六、需用的 ".c" 文件有:

         stm32f10x_rcc.c

         stm32f10x_nvic.c

         stm32f10x_gpio.c

         stm32f10x_exti.c

         stm32f10x_it.c

继续阅读