STM32外部中断配置与说明

STM32外部中断使用与说明

1.主要特性

1.1 检测脉冲宽度低于APB2时钟宽度的外部信号
1.2每个中断/事件都有独立的触发和屏蔽
1.3 每个中断都有专用的状态位
1.4 支持多达20个软件的中断/事件请求

2. 结构框架图

在这里插入图片描述

3. 操作步骤

3.1 使用外部硬件中断步骤如下:
①配置GPIO操作;
②配置对应的外部中断通道的中断使能位;
③配置触发沿,选择选择上升沿触发或者下降沿触发或者双边沿触发;
④在内核的NVIC中配置EXTI中断,以保证其可以正确的响应。
3.2 使用外部硬件事件步骤:
①配置GPIO操作;
②配置对应的外部通道的事件使能位
③配置触发沿,选择选择上升沿触发或者下降沿触发或者双边沿触发。
3.3 使用软件中断/事件步骤:
①使能外部中断或者外部事件;
②如果使用中断服务函数,需要设置内核的NVIC里EXTI中断;
③设置软件中断触发,即会产生中断。

4.EXTI中断映射

外部中断/事件线路映射事件描述
EXTI0~EXTI15Px0~Px15(x=A/B/C/D),任何一个IO口都可以启用外部中断/事件功能,由AFIO_EXTICRx寄存器配置
EXTI16PVD事件:超出电压监控阀值
EXTI17RTC闹钟事件
EXTI18USB唤醒中断事件
EXTI19以太网唤醒事件(只适用于互联型产品)

5.中断配置库的名称和说明

5.1 PFIC库函数
序号函数名称函数说明
1NVIC_PriorityGroupConfig优先级分组配置
2NVIC_Init根据NVIC_InitStruct中指定参数配置寄存器
5.2 EXTI函数库
序号函数名称函数说明
1EXTI_DeInit将EXTI寄存器设置为初始值
2EXTI_Init将EXTI_InitTypeDef中指定参数初始化EXTI寄存器
3EXTI_StructInit将EXTI_InitTypeDef中每个参数按照初始值填入
4EXTI_GenerateSWInterrupt产生一个软件中断
5EXTI_GetFlagStatus检查指定的EXTI线路状态标志位
6EXTI_ClearFlag清除EXTI线路挂起标志位
7EXTI_GetITStatus检查指定的EXTI线路是否触发请求
8EXTI_ClearITPendingBit清除EXTI线路挂起位

6.外部中断使用流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIygxHmu-1635493268116)(C:\Users\30626.LAPTOP-0B6URHNA\AppData\Roaming\Typora\typora-user-images\image-20211029152106416.png)]

7.外部中断配置代码示范

void EXTI_NVIC_Config()
{
    NVIC_InitTypeDef      NVIC_InitStruct;							//中断初始化配置句柄
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);					
    NVIC_InitStruct.NVIC_IRQChannel=EXTI3_IRQn;						//外部中断通道3
    NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;						//使能
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;			//主优先级
    NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;					//子优先级
    NVIC_Init(&NVIC_InitStruct);									//中断初始化
}
void EXTI_GPIO_Config()
{
    GPIO_InitTypeDef    GPIO_InitStruct;							//GPIO初始化配置句柄
    EXTI_InitTypeDef    EXTI_InitStruct;							//EXTI初始化配置句柄
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
    EXTI_NVIC_Config();                                             //外部中断优先级配置
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;                //GPIO模式
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3;                         	//GPIO引脚
    GPIO_Init(GPIOB,&GPIO_InitStruct);                     			//GPIO初始化
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource3);      //GPIO外部线配置
    EXTI_InitStruct.EXTI_Line=EXTI_Line3;                           //外部中断线
    EXTI_InitStruct.EXTI_LineCmd=ENABLE;                            //使能
    EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;                  //外部中断模式
    EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;              //下降沿触发
    EXTI_Init(&EXTI_InitStruct);                                    //外部中断初始化
}
void EXTI3_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line3)!=RESET)							//判断是否触发中断
  {
    printf("Run at EXTI\r\n");
    EXTI_ClearITPendingBit(EXTI_Line3);     						//清除中断
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值