实验二 中断实验

一、实验目的

  1. 掌握STM32中断程序设计流程。
  2. 熟悉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及按键 电路原理图

  1. 编程实现以下内容:

 按键未按下时,主程序状态如下: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. 实验目的。

(1)、 掌握STM32中断程序设计流程。
(2)、 熟悉STM32固件库的基本使用。
(3)、 掌握STM32定时器设计流程。

2实验内容题1编程

首先主函数先进行各个模块的初始化,while死循环则使3个灯循环点亮。

(一)编写key初始化程序

(二)编写led初始化程序

 

(三)KEY2对应的外部中断的服务函数:

 

(四)KEY3对应的外部中断的服务函数:

 (五)编写main主函数的代码:

3实验总结。

通过本次实验,学习到了什么是中断,中断源向cpu发起中断请求,若优先级级别高,cpu在满足一定条件下,可以中断当前程序的运行。然后根据中断源,找到中断服务子程序的入口地址,转去执行新的程序段。也在该实验中掌握了STM32中断程序设计流程,为今后更好编写程序起到了很大的帮助。

猜你喜欢

转载自blog.csdn.net/weixin_45784275/article/details/125425343