STM32配置EXTI外部中断

配置EXTI外部中断涉及五个主要步骤:开启RCC时钟,设置GPIO为输入模式,配置AFIO选择GPIO连接EXTI,设定EXTI的触发方式和响应类型,以及在NVIC中设置中断优先级。代码示例以PB14引脚为例,展示了详细的配置过程,包括中断函数的编写,确保在特定触发事件时能正确响应。
摘要由CSDN通过智能技术生成

如何配置EXTI外部中断

第一步:配置RCC,将涉及到的外设的时钟都打开

第二步:配置GPIO,选择端口为输入模式

第三步:配置AFIO,选择用到的GPIO,连接到后面的EXTI

第四步:配置ETXI,选择边沿触发方式,比如边沿触发方式,比如上升沿、下降沿或者双边沿。还需选择触发响应方式,可以选择中断响应和事件响应。

第五步:配置NVIC,给中断选择一个合适的优先级。最后通过NVIC,外部中断信号就能进入CPU(NVIC是内核外设不需要开启时钟)

以下是通过代码配置的EXTI外部中断(以PB14引脚为例)

第一步配置RCC时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

第二步配置GPIO:

GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOB, &GPIO_InitStructure);

第三步配置AFIO:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);

第四步配置EXTI:

EXTI_InitTypeDef EXTI_InitStructure;

    EXTI_InitStructure.EXTI_Line = EXTI_Line14;

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

    EXTI_Init(&EXTI_InitStructure);

第五步配置NVIC:

NVIC_PriorityGroupConfig();//这个函数是配置优先级分组:先占优先级和从占优先级。先占优先级即抢占优先级,从占优先级即响应优先级。

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStructure);

中断函数的编写:

void EXTI15_10_IRQHandler(void)
{
    if (EXTI_GetITStatus(EXTI_Line14) == SET)
    {
        /*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
        {
            CountSensor_Count ++;
        }
        EXTI_ClearITPendingBit(EXTI_Line14);
    }
}//中断程序结束后,一定要再调用一下清楚中断标志位的函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值