qsj19921012的个人空间 https://bbs.21ic.com/?1458704 [收藏] [复制] [RSS]

日志

STM32 GPIO中断配置过程

已有 631 次阅读2016-6-1 15:49 |系统分类:ARM

        STM32的任何一个I/O端口都可以配置成中断触发端口,下面分硬件触发中断和软件触发中断配置。
        硬件触发,选择PC13为线中断输入。
        第一部:配置GPIO端口
        GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//打开PC端口时钟
          GPIO_InitStructure.GPIO_Pin = GPIO_PIN_13; //选择第13引脚      
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        // 下拉输入
         GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化结构体
        第二部:配置中断
         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);//配置PC13位线中断
        EXTI_InitStructure.EXTI_Line = EXTI_Line13;//中断源为线中断13 
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //下降沿触发中断
        EXTI_InitStructure.EXTI_LineCmd = ENABLE; //是能线中断       
        EXTI_Init(&EXTI_InitStructure);  //初始化结构体
        第三部:配置NVIC控制器
          NVIC_InitTypeDef NVIC_InitStructure;//定义结构体
          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//先占优先级1位,从优先级3位

          NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//线中断中0-4单独,5-9公用,10-15公用
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
        第三部:编写中断服务函数
        void EXTI15_10_IRQHandler(void)
        {
                if(EXTI_GetITStatus(EXTI15_10_LINE) != RESET) //确保是否产生了EXTI Line中断
                {
                        EXTI_ClearITPendingBit(EXTI15_10LINE);     //清除中断标志位
                        ……
                }  
        }
        软件触发:在需要触发的时候调用EXTI_GenerateSWInterrupt(EXTI_Line13);//触发中断


       

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)