基于STM32F10x系列的外部中断EXTI笔记

99封情书 提交于 2020-03-05 05:23:54

外部中断EXTI
STM32F10x支持多达20个外部中断/请求事件线
除了GPIO连接到16个外部中断/请求事件线外,另外四个EXTI连接线方式如下图所示:
在这里插入图片描述
在这里插入图片描述
配置GPIOEXTI中断控制线如下图所示:
在这里插入图片描述
EXTI中断配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
EXTI配置步骤:
1、选择硬件中断选择(配置EXTI_IMR),若选择事件中断选择(配置EXTI_EMR)
2、配置上升沿触发(EXTI_RTSR)还是下降沿触发(EXTI_FTSR)
3、清除中断触发标志位/挂起位,配置(EXTI_PR)
4、等待中断触发标志位(配置EXTI_SWIER)

下面贴出使用库函数方法配置红外的例子:

void ir_init(void)
{
	GPIO_InitTypeDef 	GPIO_InitStructure;
	NVIC_InitTypeDef   	NVIC_InitStructure;
	EXTI_InitTypeDef	EXTI_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);	

		
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;				//第9号引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;			//输入模式
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//引脚的速度最大为100MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure);	
	
	
	/* 将PB9引脚连接到外部中断控制线9*/
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);	//第几号引脚就对应第几条中断控制线

	/* 配置外部中断控制线9 */
	EXTI_InitStructure.EXTI_Line = EXTI_Line9;				//指定外部中断控制线是为EXTI9
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;		//中断触发
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  //下降沿触发,识别红外脉冲的到达
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;				//使能中断/屏蔽
	EXTI_Init(&EXTI_InitStructure);

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	/* 允许外部中断控制线8触发中断,并配置优先级 */
	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;			//外部中断控制线5-9的中断号
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//抢占优先级 0x0F
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;		//响应(子)优先级0x0F
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				//使能中断/屏蔽
	NVIC_Init(&NVIC_InitStructure);	


}

void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line9) == SET)
{
//添加代码块

		//清除中断标志位
		EXTI_ClearITPendingBit(EXTI_Line9);
}

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!