STM32——外部中断

STM32单片机的外部中断系统允许在外部事件如上升沿、下降沿发生时中断当前程序,转而处理中断事件。STM32支持19个外部中断请求,每个IO口可映射到中断线,但不能同时映射到同一线。中断服务函数包括EXTI0_IRQHandler到EXTI15_10_IRQHandler。配置外部中断涉及设置IO口、映射关系、中断线初始化、NVIC配置以及中断服务函数编写。
摘要由CSDN通过智能技术生成

目录

外部中断简述

什么是外部中断

传统单片机与新型单片机外部中断区别

 STM32外部中断请求

STM32中断线与IO口的对应 

STM32 中断服务函数 

外部中断与中断服务函数的对应

 中断服务函数列表 

STM32外部中断程序编写

常用的库函数

外部中断的一般配置步骤 


外部中断简述

什么是外部中断

  • 当某种外部事件发生时,单片机的中断系统将迫使 CPU 暂停正在执行的程序从而进行中断事件的处理,中断事件处理完毕后,又返回被中断的程序处,继续执行

注:外部事件具体是指: 上升沿 、 下降沿 、 低电平 等 

传统单片机与新型单片机外部中断区别

51单片机stm32单片机
两个IO口进行外部中断全部IO口都可以作为外部中断
固定IO口映射到IO端口 

 STM32外部中断请求

STM32的中断控制器支持19个外部中断/事件请求

  • 线 0~15 :对应外部IO口的输入中断
  • 线16 :连接到PVD输出
  • 线17 :连接到RTC闹钟事件
  • 线18 :连接到USB唤醒事件

STM32中断线与IO口的对应 

 

  • 每个IO口都可以对应作为中断,几个IO口为一组映射到一个中断线上
  • 在同一时间,同一组中,只能有一个IO口映射到中断线

例:PB0 与 PA0 不可映射到同一中断线

STM32 中断服务函数 

外部中断与中断服务函数的对应

注:上面是正点原子图,少一个EXTI0 

IO口外部中断只有7个中断服务函数

  • EXTI0~EXTI4 分别对应一个中断服务函数
  • EXTI5~EXTI9 对应一个中断服务函数 
  • EXTI10~EXTI15 对应一个中断服务函数

 中断服务函数列表 

  • EXTI0_IRQHandler          
  • EXTI1_IRQHandler
  • EXTI2_IRQHandler          
  • EXTI3_IRQHandler          
  • EXTI4_IRQHandler          
  • EXTI9_5_IRQHandler        
  • EXTI15_10_IRQHandler 

STM32外部中断程序编写

常用的库函数

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
//设置IO口与中断线的映射关系

exp:  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);


/******EXTI_Init函数******/

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
 //初始化中断线:触发方式等

typedef struct
{
  uint32_t EXTI_Line;   //指定要配置的中断线           
  EXTIMode_TypeDef EXTI_Mode;   //模式:事件 OR中断
  EXTITrigger_TypeDef EXTI_Trigger;//触发方式:上升沿/下降沿/双沿触发
  FunctionalState EXTI_LineCmd;  //使能 OR失能
}EXTI_InitTypeDef;

EXTI_InitStructure.EXTI_Line=EXTI_Line2;	 
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);	

/***********************/


ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位

外部中断的一般配置步骤 

/*初始化IO口为输入*/
GPIO_Init();
/****************/


/*开启IO口复用时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/****************/

/*设置IO口与中断线的映射关系*/
void GPIO_EXTILineConfig();
/***************/

/*初始化线上中断,设置触发条件等*/
EXTI_Init();
/***************/

/*配置中断分组(NVIC),并使能中断*/
NVIC_Init();
/***************/

/*编写中断服务函数*/
EXTIx_IRQHandler();
/***************/

/*清除中断标志位*/
EXTI_ClearITPendingBit();
/***************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白变形计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值