外部中断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);
}
}
来源:CSDN
作者:Stefen.
链接:https://blog.csdn.net/weixin_45021244/article/details/104606175