美文网首页
外中断的5--9如何使用

外中断的5--9如何使用

作者: 飞向深空 | 来源:发表于2019-08-03 15:25 被阅读0次

首先要了解一点,外部中断5-9的中断优先级设置是没办法单独给外部中断5或者外部中断7设置,这几个是统一设置,也就是说,当有外部中断5-9其中的一个引起触发时,就会进入中断函数EXTI9_5_IRQHandler(),进入该函数之后再判断到底是哪个触发,然后再做相应的处理。其中PB5触发方式为上升沿触发,PE7为下降沿触发,PE9为电平变化触发,就是有上升沿或者下降沿都会触发。

//1*初始化外中断使用的端口引脚
void GPIOX_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOE,ENABLE);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOE, &GPIO_InitStructure);   
    
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;  
    GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
}



void EXTIX_Init(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;   
    
    //2*重映射
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource7);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource9);
    
    //3*EXTI的初始化
    EXTI_InitStructure.EXTI_Line =EXTI_Line5;//EXTI_Line5 
    EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//根据具体引脚
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    EXTI_InitStructure.EXTI_Line =EXTI_Line7;//EXTI_Line7 
    EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //根据具体引脚
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    EXTI_InitStructure.EXTI_Line =EXTI_Line9;//EXTI_Line9 
    EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising_Falling;//触发设置为上升下降沿触发
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);  
    
    //4*中断优先级的配置
    NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

//5*中断服务函数
voidEXTI9_5_IRQHandler(void)
{
     
    if(EXTI_GetITStatus(EXTI_Line5)!=RESET)  //判断发现是外部中断线5触发   
    {
        
        //中断处理内容,自行添加
        
        EXTI_ClearITPendingBit(EXTI_Line5);
    }

    if(EXTI_GetITStatus(EXTI_Line7)!=RESET) //判断发现是外部中断线7触发     
    {
        
        //中断处理内容,自行添加
        
        EXTI_ClearITPendingBit(EXTI_Line7);
    }   
    
    if(EXTI_GetITStatus(EXTI_Line9)!=RESET) //判断发现是外部中断线9触发
    {
        if(Bit_SET == GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_9)) //触发设置为上升下降沿触发,所以要分别写上升沿和下降沿触发后的服务函数
        {         
            
            //上升沿触发处理内容。自行添加
        
        }
        else if(Bit_RESET ==GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_9))
        {
            
            //下降沿触发处理内容。自行添加
        
        }
        EXTI_ClearITPendingBit(EXTI_Line9);
    }
}

相关文章

  • 外中断的5--9如何使用

    首先要了解一点,外部中断5-9的中断优先级设置是没办法单独给外部中断5或者外部中断7设置,这几个是统一设置,也就是...

  • 并发编程 —— 谈谈线程中断

    前言 如何中断一个线程,肯定不会使用 stop。而是使用 interrupt 方法。同时,我们知道,中断一个线程只...

  • FreeRTOS学习笔记-3-中断管理

    本章目的 哪些 FreeRTOS 的 API 函数可以在中断服务例程中使用。 延迟中断方案是处何实现的。 如何创建...

  • Java多线程:如何停止/中断一个运行中的线程?

    # 面试题: 如何正确地停止/中断一个线程 哪些情况下线程会停止 如何处理不可中断的阻塞 # 核心思想 使用int...

  • 如何中断forEach循环

    视频课程-如何中断forEach循环 在使用for循环的时候可以使用break 或者return语句来结束for循...

  • HttpClient系列-基础知识(二)

    简述 今天开始介绍下基础知识二,主要内容是请求的中断、重定向。 中断请求 如何使用Apache HttpClien...

  • Java多线程学习之Interrupt中断

    引言 本文将由以下几点来说明Interrupt中断:1.什么是中断?为什么使用中断?2.中断的作用3.中断的使用 ...

  • 9.18学习总结

    今天讲了中断优先级管理NVIC,它包括:NVIC中断优先级分组、中断优先级设置;还讲了外部中断:外部中断概述、外...

  • Linux中断中能否sleep

    中断、软中断、硬件中断、异常、同步中断、异步中断,这几个概念非常容易混淆,这里对本文使用的中断、软中断、softi...

  • uboot step 12 按键玩中断-S3C6410中断介绍

    uboot step 12 按键玩中断-S3C6410中断介绍 向量中断控制器相关寄存器 中断处理流程 中断源-外...

网友评论

      本文标题:外中断的5--9如何使用

      本文链接:https://www.haomeiwen.com/subject/yuyjdctx.html