三、外部中断

三、外部中断

1.外部中断配置初始化

相同的pin脚只能配置一个外部中断,比如我的PA0引脚配置成了 外部中断,那么我的PB0就不能配置成外部中断,因为这一中断通道已经被PA0所占用,这是因为STM32单片机的内部结构所导致的,使用的时候需要注意

void Exti_Init()
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStruct);
    
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
    
  EXTI_InitTypeDef EXTI_InitStruct;
  EXTI_InitStruct.EXTI_Line = EXTI_Line14;
  EXTI_InitStruct.EXTI_LineCmd = ENABLE;
  EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_Init(&EXTI_InitStruct);
    
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  NVIC_InitTypeDef NVIC_InitStruct;
  NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
  NVIC_Init(&NVIC_InitStruct);
}

2.外部中断回调函数

外部中断函数的函数名是固定的不能随意更改,函数名可在.s启动文件的中断向量表中查询
void EXTI15_10_IRQHandler(void)
{
  if(EXTI_GetFlagStatus(EXTI_Line14) == SET)
  {
    /*执行中断程序*/
        
        
    /*清除中断标志位*/
    EXTI_ClearITPendingBit(EXTI_Line14);
        
  }
}

 

本次笔记基于B站UP主江协科技STM32教程总结而来
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索