【实验三】外部中断实验
2016-01-21 21:52
399 查看
一、实验目的
1)了解STM32外部中断相关知识;
2)使用STM32外部中断,实现两个LED灯亮灭;
二、STM32外部中断简介
1)STM32F103系列有60个可屏蔽中断;支持19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
STM32F103 的19 个外部中断为:
线 0~15:对应外部 IO 口的输入中断。
线 16:连接到 PVD 输出。
线 17:连接到 RTC 闹钟事件。
线 18:连接到 USB 唤醒事件。
中断线对应为:
2)外部中断函数:
EXPORT EXTI0_IRQHandler
EXPORT EXTI2_IRQHandler
EXPORT EXTI4_IRQHandler
EXPORT EXTI15_10_IRQHandler
EXPORT EXTI9_5_IRQHandler
EXPORT EXTI1_IRQHandler
EXPORT EXTI3_IRQHandler
中断线 0-4 每个中断线对应一个中断函数, 中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,中断线 10-15 共用中断函数 EXTI15_10_IRQHandler。
在编写中断服务函数的时候会经常使用到两个函数, 第一个函数是判断某个中断线上的中断是否发生(标志位是否置位):
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
这个函数一般使用在中断服务函数的开头判断中断是否发生。 另一个函数是清除某个中断线上的中断标志位:
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
这个函数一般应用在中断服务函数结束之前, 清除中断标志位。
3)IO口外部中的一般步骤
1) 初始化 IO 口为输入。
2) 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3) 初始化线上中断, 设置触发条件等。
4) 配置中断分组( NVIC),并使能中断。
5) 编写中断服务函数。
三、硬件设计
LED灯、按键。
四、软件设计
exti.c 主要涉及初始化以及中断函数的实现
五、实验结果
成功!
1)了解STM32外部中断相关知识;
2)使用STM32外部中断,实现两个LED灯亮灭;
二、STM32外部中断简介
1)STM32F103系列有60个可屏蔽中断;支持19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
STM32F103 的19 个外部中断为:
线 0~15:对应外部 IO 口的输入中断。
线 16:连接到 PVD 输出。
线 17:连接到 RTC 闹钟事件。
线 18:连接到 USB 唤醒事件。
中断线对应为:
2)外部中断函数:
EXPORT EXTI0_IRQHandler
EXPORT EXTI2_IRQHandler
EXPORT EXTI4_IRQHandler
EXPORT EXTI15_10_IRQHandler
EXPORT EXTI9_5_IRQHandler
EXPORT EXTI1_IRQHandler
EXPORT EXTI3_IRQHandler
中断线 0-4 每个中断线对应一个中断函数, 中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,中断线 10-15 共用中断函数 EXTI15_10_IRQHandler。
在编写中断服务函数的时候会经常使用到两个函数, 第一个函数是判断某个中断线上的中断是否发生(标志位是否置位):
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
这个函数一般使用在中断服务函数的开头判断中断是否发生。 另一个函数是清除某个中断线上的中断标志位:
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
这个函数一般应用在中断服务函数结束之前, 清除中断标志位。
3)IO口外部中的一般步骤
1) 初始化 IO 口为输入。
2) 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3) 初始化线上中断, 设置触发条件等。
4) 配置中断分组( NVIC),并使能中断。
5) 编写中断服务函数。
三、硬件设计
LED灯、按键。
四、软件设计
exti.c 主要涉及初始化以及中断函数的实现
//外部中断0服务程序 void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; KEY_Init(); // 按键端口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟 <span style="white-space:pre"> </span>//GPIOE.2 中断线以及中断初始化配置 下降沿触发 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); EXTI_InitStructure.EXTI_Line=EXTI_Line2; //KEY2 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键WK_UP所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 }中断函数实现:功能的实现也主要是在中断函数中实现
void EXTI0_IRQHandler(void) { delay_ms(10);//消抖 if(KEY3==1) //按键KEY3 { LED0=!LED0; } EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位 }
五、实验结果
成功!
相关文章推荐
- ubuntu 64上的GCC如何编译32位程序
- LaTeX 如何使用双引号,单引号
- 01Java基础知识
- ubuntu 64上的GCC如何编译32位程序
- leetcode之 Remove Element
- HDU 1043 Eight(八数码第七境界|A*+哈希+曼哈顿距离)
- session丢失
- 并查集
- 线性代数之齐次坐标
- C# WinForm 父窗体 子窗体 传值
- 控制文件和控制文件的自动备份,oracle11g 控制文件备份的延迟特性
- 马哥linux运维实战练习案例-2015年(第一次作业)
- Hexo搭建个人网站
- [Maven实战](1)安装与配置
- 网络编程02(URL)
- device eth0 does not seem to be present, delaying initialization
- Android BroadcastReceiver的使用
- Qt for OS X - Deployment(官方文档)
- 作用域的理解--第一篇
- 二级指针的三种内存模型