赞
踩
总体操作:
第一步:打开时钟,开启GPIO时钟和AFIO时钟,只有开启时钟了才能运行。
第二步:配置GPIO,选择端口为输入模式
第三步:配置AFIO,选择使用的GPIO连接到EXTI
第四步:配置EXTI,选择边沿触发方式(上升,下降,双边)及响应方式(中断,事件)
第五步:配置NVIC,选择中断优先级
最后通过NVIC,外部中断信号便可以进入CPU
具体操作:
第一步:开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
EXTI和NVIC的时钟一直都是开启的,所有不需要打开。
第二步:配置GPIO
手册上显示,当GPIO为EXTI输入线时,需要配置为浮空或者上拉或者下拉输入
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//这里配置为上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//选择13号引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
第三步:配置AFIO
配置AFIO只有一个函数
GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex)
配置AFIO数据选择器,,选择想要的中断引脚,因为起那面配置的GPIO13号引脚
所以也要选择13号引脚
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13)
此时AFIO输入端就是GPIOB的14号引脚,输出端连接的就是EXTI的14号线路
第四步:配置EXTI
和初始化GPIO一样,需要对结构体命名,然后对结构体变量进行赋值,最后初始化结构体
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line13;//前面配置的Pin13,所选择13通道
EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能通道
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//模式可以选择中断和事件模式,这里用中断,所以选择中断模式
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//对中断触发模式进行配置,有上升沿和下降沿,还有即上升又下降
EXTI_Init(&EXTI_InitStructure);
第五步:配置NVIC
配置NVIC第一步先分组,配置抢占优先级和响应优先级,具体可以看库函数的说明,然后就和GPIO的配置一样了
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//选择通道,15到10就集成在这里,之前选的13
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//对抢占优先级取值范围配置。具体参考库函数说明
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//对响应优先级取值范围配置。具体参考库函数说明
NVIC_Init(&NVIC_InitStructure);
至此外部中断配置完毕,可以接着就可以写中断函数了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。