6.外部中断实验汇编.pptx

6.外部中断实验汇编

嵌入式系统 六. EXTI实验 本章内容 1. 外部中断简介 2. 外部中断初始化步骤 3. 外部中断案例 4. 跑马灯实验改进 1. 外部中断简介 1.1 外部中断概述:(STM32参考手册 P137) STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。 每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。 1.2 外部中断通用I/O映射 STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,GPIO 的管脚GPIOx.0~GPIOx.15(x=A~G)分别对应中断线 0~15。这样每个中断线对应了最多 7 个 IO 口,以线 0 为例:它对应了 GPIOA.0、 GPIOB.0、 GPIOC.0、 GPIOD.0、GPIOE.0、 GPIOF.0、 GPIOG.0。而中断线每次只能连接到 1 个 IO 口上,这样就需要通过配置来决定对应的中断线配置到哪个 GPIO 上了。 1.3 外部中断向量(STM32参考手册 P133) IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。从表中可以看出,外部中断线5~9分配一个中断向量,共用一个服务函数外部中断线10~15分配一个中断向量,共用一个中断服务函数。 1.4 外部中断服务函数列表 EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler 2. 外部中断初始化步骤 2.1 外部中断的一般步骤: 初始化 IO 口为输入。 开启 AFIO 时钟。 设置 IO 口与中断线的映射关系。 初始化线上中断, 设置触发条件等。 配置中断分组( NVIC),并使能中断。 编写中断服务函数。 清除中断标志位。 2.2 配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig() void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) 该函数将 GPIO 端口与中断线映射起来,使用范例是: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); 2.3 中断初始化函数 EXTI_Init() void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); 使用范例是: EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line=EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(EXTI_InitStructure); 2.4 中断服务函数经常使用的两个函数 1. 判断中断线中断状态,是否发生: ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); 2.清除中断线上的中断标志位: void EXTI_ClearITPendingBit(uint32_t EXTI_Line); 2.4 中断服务函数经常使用的两个函数 使用范例是: void EXTI3_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line3)!=RESET) { 中断服务函数 EXTI_ClearITPendingBit(EXTI_Line3); } } 3. 外部中断案例 3.1 外部中断头文件 按新建按钮新建一个文件,然后保存在 HARDWARE-EXTI 文件夹下面,保存为 exti.h。在该文件中输入如下代码: #ifndef __EXTI_H #define __EXIT_H #include sys.h

文档评论(0)

1亿VIP精品文档

相关文档