欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于STM32外部中断配置

程序员文章站 2024-02-21 23:25:40
...

外部中断映射原理

首先所有的GPIO口都可以被配置成外部中断源,但是外部中断线只有19根,分别是EXTI0-EXTI18;这样就不能一个GPIO口对应一根外部中断线了,于是就有了多个GPIO口公用一根外部中断线的设计了,怎么共,见下图;中断响应只响应中断线,不直接响应GPIO,所以在使用的步骤是,1.配置GPIO的引脚模式,2配置EXTI的中断源,3配置NVIC的中断等级和中断函数
关于STM32外部中断配置

配置引脚模式

打开时钟,包括AFIO时钟,配置外部中断寄存器得用,配置上拉输入

GPIO_InitTypeDef GPIO_InitStructure; 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;       
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;	 //上拉输入
 GPIO_Init(GPIOC, &GPIO_InitStructure);

配置EXTI中断源

 EXTI_InitTypeDef EXTI_InitStructure;
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10); 
  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); 

配置NVIC,确定等级和中断函数

  NVIC_InitTypeDef NVIC_InitStructure;
 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置第一组抢占4位,次要0位,依次类推,到抢占0位,次要4位
  
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//外部中断函数向量有1,2,3,4,5-9,10-15
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//次优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

至于什么时候打开AFIO时钟,参考https://blog.csdn.net/u013082827/article/details/77543394

相关标签: STM32外设中断