一、实验目的
- 掌握STM32中断程序设计流程。
- 熟悉STM32固件库的基本使用。
二、实验设备
硬件: PC机 一台
STM32开发板 一套
软件: MDK V4.0 一套
Windows 7 一套
- 实验原理
1、STM32外部中断:
STM32有20个外部中断源,如下:
16个GPIO输入中断;
PVD输出;
RTC闹钟事件;
USB唤醒事件;
以太网唤醒事件(只适用于互联型产品)。
GPIO输入中断虽然有16个输入通道,但是只占用了7个中断向量。EXTI0~EXTI4各占用一个中断向量,EXTI5~9共用一个,EXTI10~15共用一个。所以在编程的时候EXTI5~9将共用一个中断函数,EXTI10~15共用一个中断函数。
这16个外部中断和GPIO的映射图如下。
由上图可以看出,这16个中断的输入引脚是可以由用户自己重新定义的。当然是有限制的,例如:EXTI0通道,只能选择PA0,PB0,PC0,PD0,PE0,PF0,PG0这7个引脚中的一个;而EXTI1只能选择名称为Px1的7个引脚中的一个(x可取A~G中的一个);依次类推,EXTI2只能选择Px2引脚;……。具体选择那个引脚,可由寄存器AFIO_EXTICRx(x可取1~4)的相应位设置。
2、相关内部寄存器
上图是外部中断/事件控制器的框图。该框图涉及6个寄存器,分别是:
下降沿触发选择寄存器(EXTI_FTSR);
上升沿触发选择寄存器(EXTI_RTSR);
软件中断事件寄存器(EXTI_SWIER);
挂起寄存器(EXTI_PR);
中断屏蔽寄存器(EXTI_IMR);
事件屏蔽寄存器(EXTI_EMR)。
3、NVIC---嵌套向量中断控制器
STM32最多只有68个中断通道,所以没有使用上述的全部寄存器。对各个中断的优先级设置就是通过写这些寄存器组完成的。STM32的中断优先级寄存器只用了8位宽度的高4位,而这4位的意义则由寄存器AIRCR的[10:8]这3个位的设置决定。
4、STM32外部中断流程
1)初始化IO口为输入。
2)开启IO口复用时钟,设置IO口与中断线的映射关系。
3)初始化线上中断,设置触发条件等。
4)配置中断分组(NVIC),并使能中断。
5)编写中断服务函数。
四、实验内容
LED及按键 电路原理图
- 编程实现以下内容:
按键未按下时,主程序状态如下:LED1、LED2、LED3交替闪烁,每个LED闪烁间隔时间0.2S(一亮一灭共0.2S),持续1S。
‚若键盘K2按下,实现LED1、LED2、LED3正向流水灯功能(即依次顺序点亮,从上到下),LED间隔时间0.2S。(采用判断按键是否按下 编程 ,非中断)
ƒ K2按键按下,进入中断状态:LED1、LED2、LED3正向流水灯功能(即依次顺序点亮,从上到下),LED间隔时间0.2S;经过8次循环后,结束中断。(中断方式编程)
④ 在ƒ的基础上继续编程。若键盘K3按下,也进入中断状态:LED1、LED2、LED3反向流水灯功能(即依次顺序点亮,从下到上),LED间隔时间0.2S; 经过3 次循环后,结束中断。要求:键盘K3 中断级别 比 键盘K2 中断级别高。
提交实验报告内容要求:
- 实验目的。
(1)、 掌握STM32中断程序设计流程。
(2)、 熟悉STM32固件库的基本使用。
(3)、 掌握STM32定时器设计流程。
2.实验内容。题1编程。
首先主函数先进行各个模块的初始化,while死循环则使3个灯循环点亮。
(一)编写key初始化程序
(二)编写led初始化程序
(三)KEY2对应的外部中断的服务函数:
(四)KEY3对应的外部中断的服务函数:
(五)编写main主函数的代码:
3.实验总结。
通过本次实验,学习到了什么是中断,中断源向cpu发起中断请求,若优先级级别高,cpu在满足一定条件下,可以中断当前程序的运行。然后根据中断源,找到中断服务子程序的入口地址,转去执行新的程序段。也在该实验中掌握了STM32中断程序设计流程,为今后更好编写程序起到了很大的帮助。
搜索
复制