外中断的5

您所在的位置:网站首页 一个中断服务程序是什么 外中断的5

外中断的5

2024-07-13 14:42| 来源: 网络整理| 查看: 265

首先要了解一点,外部中断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); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3