STM32F4 EXTI外部中断(一)
2022-06-14 来源:eefocus
STM32中共有23根中断总线
外部中断配置步骤
1.使能IO时钟,初始化IO为输入
详见[https://blog.csdn.net/conjurer_yft/article/details/106963994]
2.开启SYSCFG时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
3.设置IO口与中断线映射关系
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
参数1:端口组 EXTI_PortSourceGPIOA,
EXTI_PortSourceGPIOB,
EXTI_PortSourceGPIOC ~~~
参数2:中断线:EXTI_PinSource0 ~ EXTI_PinSource15
4.初始化中断
1.定义中断结构体
EXTI_InitTypeDef EXTI_InitStructure;
2.配置中断线标号
EXTI_InitStructure.EXTI_Line=中断线号;
中断线号:取值范围为EXTI_Line0~EXTI_Line15 //外部中断线0~15
3.配置中断模式
EXTI_InitStructure.EXTI_Mode = 中断模式;
中断模式:
EXTI_Mode_Interrupt //设置EXIT为中断请求
EXTI_Mode_Event //设置EXIT为事件请求
4.配置触发方式
EXTI_InitStructure.EXTI_Trigger =触发方式;
触发方式:
EXTI_Trigger_Falling //下降沿触发
EXTI_Trigger_Rising //上升沿触发
EXTI_Trigger_Rising_ Falling //上升沿和下降沿触发
5.使能中断线
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
6.中断初始化
EXTI_Init(&EXTI_InitStructure); //初始化外设EXTI寄存器
5.配置中断分组NVIC
配置优先级分组
| 优先级分组 | 主优先级(抢占优先级) | 子优先级 (响应优先级) | 描述 |
--------------------------------------------------------------------------
| NVIC_PriorityGroup_0 | 0 | 0-15 | 主-0bit,子-4bit |
| NVIC_PriorityGroup_1 | 0-1 | 0-7 | 主-1bit,子-3bit |
| NVIC_PriorityGroup_2 | 0-3 | 0-3 | 主-2bit,子-2bit |
| NVIC_PriorityGroup_3 | 0-7 | 0-1 | 主-3bit,子-1bit |
| NVIC_PriorityGroup_4 | 0-15 | 0 | 主-4bit,子-0bit |
--------------------------------------------------------------------------*/
配置优先级分组
NVIC_PriorityGroupConfig(优先级分组);
1.定义NVIC结构体
NVIC_InitTypeDef NVIC_InitStructure;
2.配置中断通道
NVIC_InitStructure.NVIC_IRQChannel=中断通道;
中断通道:
EXTI0_IRQn
EXTI1_IRQn
EXTI2_IRQn
EXTI3_IRQn
EXTI9_5IRQn
EXTI5_10IRQn
3.设置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 抢占优先级
4.设置响应优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 响应优先级
5.使能外部中断通道
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
6.初始化
NVIC_Init(&NVIC_InitStructure);
6.编写中断函数
STM32F4的IO口外部中断函数只有7个,分别为:
EXPORT EXTI0_IRQHandler
EXPORT EXTI1_IRQHandler
EXPORT EXTI2_IRQHandler
EXPORT EXTI3_IRQHandler
EXPORT EXTI4_IRQHandler
EXPORT EXTI9_5_IRQHandler
EXPORT EXTI15_10_IRQHandler
中断线0-4每个中断线对应一个中断函数,中断线5-9共用中断函数EXTI9_5_IRQHandler,中断线10-15共用中断函数EXTI15_10_IRQHandler
编写中断函数
void 外部中断函数(void)
{
}
1. 判断中断发生
EXTI_GetITStatus(中断线)!=RESET
2. 清除中断标志位
EXTI_ClearITPendingBit(中断线);
中断线号:取值范围为EXTI_Line0~EXTI_Line15 //外部中断线0~15
常用外部中断例程
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line13) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
下一篇:STM32F4 GPIO(一)