美文网首页
stm32中断

stm32中断

作者: 清亮2015 | 来源:发表于2018-08-31 20:37 被阅读0次

    初始化中断

    
    void NVIC_cfg(void)
    {
      EXTI_InitTypeDef   EXTI_InitStructure;
      GPIO_InitTypeDef   GPIO_InitStructure;
      NVIC_InitTypeDef   NVIC_InitStructure;
        GPIO_InitTypeDef   GPIO_InitStructure1;
    
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);
        //RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
      /* Enable SYSCFG clock */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
      
      /* Configure PA0 pin as input floating */
      
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
        
      GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IN;
      GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_NOPULL;
      GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
      GPIO_Init(GPIOE, &GPIO_InitStructure1);
        
        
        
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);
        
      
    
      EXTI_InitStructure.EXTI_Line = EXTI_Line0;//设置外部中断线
      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_Line2;
      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_Line3;
      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_Line4;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure);  
        
    
      NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    
      NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //设置中断通道
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//设置抢占优先级
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;// 设置响应优先级
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//  使能
      NVIC_Init(&NVIC_InitStructure);
        
      NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
        
      NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    }
    

    这里设置的是四个按键的中断,
    1、先定义结构体、在初始化时钟。
    2、在设置串口为输入模式。
    3、配置EXIT中断线。
    4、配置中断控制器NVIC。
    5、写中断服务子程序 。

    中断服务程序

    实现功能是点灯

    void EXTI0_IRQHandler(void)
    {
        if(EXTI_GetITStatus(EXTI_Line0) == SET) // 如果产生了中断
        {
            PFout(9) = ~PFout(9);
        }
        
        EXTI_ClearITPendingBit(EXTI_Line0);
    }
    

    相关文章

      网友评论

          本文标题:stm32中断

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