STM32 外部中断配置操作

总体操作:

第一步:打开时钟,开启GPIO时钟和AFIO时钟,只有开启时钟了才能运行。

第二步:配置GPIO,选择端口为输入模式

第三步:配置AFIO,选择使用的GPIO连接到EXTI

第四步:配置EXTI,选择边沿触发方式(上升,下降,双边)及响应方式(中断,事件)

第五步:配置NVIC,选择中断优先级

最后通过NVIC,外部中断信号便可以进入CPU
STM32 外部中断配置操作_第1张图片

具体操作:
第一步:开启时钟

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

EXTI和NVIC的时钟一直都是开启的,所有不需要打开。
第二步:配置GPIO
STM32 外部中断配置操作_第2张图片
手册上显示,当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);

至此外部中断配置完毕,可以接着就可以写中断函数了

你可能感兴趣的:(stm32,单片机)