STM32——外部中断EXIT实现

外部中断实现步骤:

一、初始化,包括:1.AFIO时钟中断和GPIO时钟使能;

                         2.GPIO初始化

                         3.设置EXTI线

                         4.中断向量初始化

二、中断服务函数

采用PB9作为外部中断源,具体实现程序如下:

一、初始化

 void EXTI_PB9_Init(void)

 {

   GPIO_InitTypeDef GPIO_InitStructure;

   NVIC_InitTypeDef NVIC_InitStructure;

   EXTI_InitTypeDef EXTI_InitStructure;

   //1.使能GPIO和AFIO时钟,值得注意的是,当使用外部中断的时候必须使能AFIO时钟。

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

   //2.GPIO初始化

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO速度为50MHz

   GPIO_Init(GPIOB,&GPIO_InitStructure);  

   //3.设置EXTI线

   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);  //将EXIT线9连接到PB9

   EXTI_InitStructure.EXTI_Line = EXTI_Line9;

   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  //上升下降沿触发

   EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断线

   EXTI_Init(&EXTI_InitStructure);//初始化中断

   //4.中断向量

   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;

   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;

   NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;

   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

   NVIC_Init(&NVIC_InitStructure);

 }

二、中断服务函数

 void EXTI9_5_IRQHandler(void)

 {

   if(EXTI_GetITStatus(EXTI_Line9) != RESET)  //EXTI9产生了中断

   {

     。。。。。。。。。。//中断处理,自行脑补~~~~

   }

   EXTI_ClearITPendingBit(EXTI_Line9);//清除中断

 }

注意:

1.外部中断5~外部中断9都是使用同一个中断函数EXTI9_5_IRQHandler ,若想同时使用,需要在中断函数中区分不同的中断线,如:

if(EXTI_GetITStatus(EXTI_Line9) != RESET)  //EXTI9产生了中断
2.外部中断线和管脚号是一一对应的,如:
EXTI1 ——> Pin1;
EXTI2 ——> Pin2;
EXTI3 ——> Pin3;
EXTI4 ——> Pin4;
。。。
而不是随意映射的。
上一篇:PHP对象转数组||PHP数组转对象


下一篇:PHP面试题目搜集