简介
STM32F1基本配置3.外部中断配置,侧重于即配即用。因此不会讲述太多原理性的东西,做到即拿即用的效果。 中断线的知识
1.STM32有16条中断线,每个中断线可以选择配置其相对应的16个引脚之中的一个引脚。 如EXTI0中断线可以配置输入为PA0-PG0之中的一个引脚。 EXTI15中断线可以配置输入为PA15-PG15之中的一个引脚。
所以就会有函数来映射端口和中断线
所以就会有函数来映射端口和中断线
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
这里PinSource5代表中断线EXTI5,然后是C端口,所以配置的对应关系是EXTI5 - PC5。
2.中断线0-4分别对应一个中断函数,所以退出中断函数只需要清楚标志位
void EXTI0_IRQHandler(void)
{
//用户代码
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0中断标志位
}
中断线5-9和中断线10-15共用一个中断函数,所以要先判断是哪条线的中断
void EXTI9_5_IRQHandler(void)
{
//用户代码
if(EXTI_GetITStatus(EXTI_Line5) == SET)
{
//用户代码
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5中断标志位
}
}
触发方式
EXTI_Trigger_Falling;//下降沿触发
EXTI_Trigger_Rising;//上升沿触发
EXTI_Trigger_Rising_Falling;//上升下降电平触发
中断线配置
GPIO_InitTypeDef GPIO_InitStructure;//引脚配置结构体
EXTI_InitTypeDef EXTI_InitStructure;//中断配置结构体
NVIC_InitTypeDef NVIC_InitStructure;//中断管理器配置结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//需要使能AFIO端口复用时
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA15
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);//端口中断线映射
EXTI_InitStructure.EXTI_Line=EXTI_Line5;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//使能对应外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
中断函数
void EXTI5_IRQHandler(void)
{
//用户代码
EXTI_ClearITPendingBit(EXTI_Line5); //清除EXTI0中断标志位
}
简介
STM32F1基本配置3.外部中断配置,侧重于即配即用。因此不会讲述太多原理性的东西,做到即拿即用的效果。 中断线的知识
1.STM32有16条中断线,每个中断线可以选择配置其相对应的16个引脚之中的一个引脚。 如EXTI0中断线可以配置输入为PA0-PG0之中的一个引脚。 EXTI15中断线可以配置输入为PA15-PG15之中的一个引脚。
所以就会有函数来映射端口和中断线
所以就会有函数来映射端口和中断线
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
这里PinSource5代表中断线EXTI5,然后是C端口,所以配置的对应关系是EXTI5 - PC5。
2.中断线0-4分别对应一个中断函数,所以退出中断函数只需要清楚标志位
void EXTI0_IRQHandler(void)
{
//用户代码
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0中断标志位
}
中断线5-9和中断线10-15共用一个中断函数,所以要先判断是哪条线的中断
void EXTI9_5_IRQHandler(void)
{
//用户代码
if(EXTI_GetITStatus(EXTI_Line5) == SET)
{
//用户代码
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5中断标志位
}
}
触发方式
EXTI_Trigger_Falling;//下降沿触发
EXTI_Trigger_Rising;//上升沿触发
EXTI_Trigger_Rising_Falling;//上升下降电平触发
中断线配置
GPIO_InitTypeDef GPIO_InitStructure;//引脚配置结构体
EXTI_InitTypeDef EXTI_InitStructure;//中断配置结构体
NVIC_InitTypeDef NVIC_InitStructure;//中断管理器配置结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//需要使能AFIO端口复用时
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA15
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);//端口中断线映射
EXTI_InitStructure.EXTI_Line=EXTI_Line5;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//使能对应外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
中断函数
void EXTI5_IRQHandler(void)
{
//用户代码
EXTI_ClearITPendingBit(EXTI_Line5); //清除EXTI0中断标志位
}
举报