STM32
直播中

王雪

7年用户 959经验值
私信 关注
[问答]

STM32F1的中断线是什么?

STM32F1的中断线是什么?

回帖(1)

魏霖

2021-11-18 15:34:51
简介

STM32F1基本配置3.外部中断配置,侧重于即配即用。因此不会讲述太多原理性的东西,做到即拿即用的效果。 中断线的知识

1.STM32有16条中断线,每个中断线可以选择配置其相对应的16个引脚之中的一个引脚。  如EXTI0中断线可以配置输入为PA0-PG0之中的一个引脚。  EXTI15中断线可以配置输入为PA15-PG15之中的一个引脚。




   所以就会有函数来映射端口和中断线
  所以就会有函数来映射端口和中断线
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
  这里PinSource5代表中断线EXTI5,然后是C端口,所以配置的对应关系是EXTI5 - PC5。
  
2.中断线0-4分别对应一个中断函数,所以退出中断函数只需要清楚标志位
void EXTI0_IRQHandler(void)
{
        //用户代码
        EXTI_ClearITPendingBit(EXTI_Line0);  //清除EXTI0中断标志位
}


中断线5-9和中断线10-15共用一个中断函数,所以要先判断是哪条线的中断
void EXTI9_5_IRQHandler(void)
{                       
        //用户代码
        if(EXTI_GetITStatus(EXTI_Line5) == SET)
        {
                //用户代码
                EXTI_ClearITPendingBit(EXTI_Line5);  //清除LINE5中断标志位  
        }
}
触发方式


EXTI_Trigger_Falling;//下降沿触发
EXTI_Trigger_Rising;//上升沿触发
EXTI_Trigger_Rising_Falling;//上升下降电平触发
中断线配置

    GPIO_InitTypeDef GPIO_InitStructure;//引脚配置结构体
        EXTI_InitTypeDef EXTI_InitStructure;//中断配置结构体
        NVIC_InitTypeDef NVIC_InitStructure;//中断管理器配置结构体


          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//需要使能AFIO端口复用时
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTC时钟
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;//PC5
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
        GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA15
       
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);//端口中断线映射


          EXTI_InitStructure.EXTI_Line=EXTI_Line5;
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        //中断模式
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);         
         
          NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//使能对应外部中断通道
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级1
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
          NVIC_Init(&NVIC_InitStructure);
中断函数

void EXTI5_IRQHandler(void)
{
        //用户代码
        EXTI_ClearITPendingBit(EXTI_Line5);  //清除EXTI0中断标志位
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分