STM32(学习记录)——EXTI外部中断
STM32的每个I/O口都可以作为外部中断输入。
STM32的中断控制器可以支持20个中断/事件请求
其中的线0~15对应外部I/O口的输入中断
线16对应PVD输出
线17对应RTC闹钟事件
线18对应USB唤醒事件
线19对应以太网唤醒事件
图一 中断线与I/O口的对应关系
外部中断(标准库)一般配置过程:
①构建(GPIO口,NVIC嵌套中断控制器,外部中断)初始化结构体对象
GPIO_InitTypeDef GPIO_InitStruct
NVIC_InitTypeDef NVIC_InitStruct
EXTI_InitTypeDef EXTI_InitStruct
②开启IO时钟以及复用时钟(AFIO)(x=A~G)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCCAPB2Periph_GPIOx,ENABLE);
③初始化IO为输入(input)(x=A~G)
(1)编辑GPIO初始化结构体对象
配置IO口工作模式(input)
配置管脚(之后需要将其映射为外部中断输入端)
(2)调用GPIO_Init(GPIOx,&GPIO_InitStruct);
④编辑外部中断初始化结构体对象(y=0~15)
EXTI_InitStruct.EXTI_Line=EXTI_Liney; //配置对应的中断线
EXTI_InitStruct.EXTI_LineCmd=ENABLE; //使能中断线
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; //选择模式可为事件/中断,EXTI_Mode_Event/EXTI_Mode_Interrupt,这里选择后者–中断
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //设置中断触发条件,可选选项为 :EXTI_Trigger_Rising/EXTI_Trigger_Falling/EXTI_Trigger_Rising_Falling 分别对应上升沿触发/下降沿触发/边沿触发
⑤设置IO口与中断线的映射关系
void_GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcey);
//GPIOx的相应管脚编号应与GPIO_PinSourcey的相应中断线号相等
⑥初始化线上中断
EXTI_Init(&外部中断初始化结构体对象);
⑦定义NVIC中断分组(x=0~4)
NVIC_PriorityGroupConfig(x);
/*分组详情如下:
pre-emption priority-----------抢占优先级
subpriority-----------------------中断优先级
NVIC_PriorityGroup_0: 0 位 pre-emption priority(范围:0) 4 位 for subpriority(0~15)
NVIC_PriorityGroup_1: 1 位 for pre-emption priority(0~2) 3 位 for subpriority(0~7)
NVIC_PriorityGroup_2: 2 位 for pre-emption priority(0~3) 2 位 for subpriority(0~3)
NVIC_PriorityGroup_3: 3 位 for pre-emption priority(0~7) 1 位 for subpriority(0~2)
NVIC_PriorityGroup_4: 4 位 for pre-emption priority(0~15) 0 位 for subpriority(0)
*/
⑧编辑NVIC初始化结构体对象(z为外部中断编号)
NVIC_InitStruct.NVIC_IRQChannel= EXTIz_IRQn; //选择外部中断z的通道
NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE; //使能外部中断通道
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1; //配置中断抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; //配置中断子优先级
⑨初始化NVIC嵌套中断控制器(类似于51单片机内的EA总中断)
NVIC_Init(&NVIC_InitStruct);
⑩编辑中断服务函数(x=0~4)
服务函数分别为:
(0~4)void EXTIx_IRQHandler();
(5~9)voidEXTI9_5_IRQHandler()
(10~15)voidEXTI15_10_IRQHandler()
11,清除中断标志位(x=0~15)为下次进入中断服务函数做好准备
EXTI_ClearITPendingBit(EXTI_Linex);
本文详细介绍了STM32的EXTI外部中断配置过程,包括初始化GPIO、NVIC和EXTI结构体,设置中断线与IO口映射,以及中断服务函数的编写。STM32可支持20个中断事件,其中16~19线对应特定功能。通过步骤化的配置,读者可以了解如何实现STM32的外部中断功能。

1515

被折叠的 条评论
为什么被折叠?



