STM32外部中断

STM32每个引脚都可以作为外部中断使用,

1、代码

外部中断初始化程序:

//外部中断服务程序
void EXTI_Config(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource, uint32_t EXTI_Line, uint8_t NVIC_IRQChannel)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    //使能时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //使能复用功能时钟

    //GPIO Structure
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_4;             //PB5
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //Set Frequency 50MHz   
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU ;         //上拉输入
    GPIO_Init(GPIOE, &GPIO_InitStructure); 

    //【中断端口、中断线】以及【中断初始化配置】,下降沿触发
    GPIO_EXTILineConfig(GPIO_PortSource, GPIO_PinSource);
    EXTI_InitStructure.EXTI_Line    = EXTI_Line;
    EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;  
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

    //NVIC初始化配置
    NVIC_InitStructure.NVIC_IRQChannel = NVIC_IRQChannel;           //使能PA15的外部中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;    //抢占优先级1, 
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;           //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                 //使能外部中断通道
    NVIC_Init(&NVIC_InitStructure);     //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
}

外部中断处理程序

u8 ifconfig = 0;    //全局变量,中断发生标志,进入中断以后将该位置1

//外部中断4服务程序 
void EXTI4_IRQHandler(void)
{
    mydelay(10);//消抖
    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0)//确认按下
    {
        ifconfig = 1;
    }

    EXTI_ClearITPendingBit(EXTI_Line4); //清除LINE15上的中断标志位  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值