3、外部中断实验
学习目标
1.学习STM32外部中断的知识。
2.使用按键模块以外部终端的方式控制板载led灯的开关。
外部中断介绍:
中断就是cpu在执行程序时,有其他事件需要占用cpu,cpu接收到这个中断请求后暂停原程序的执行,去执行中断函数,中断函数执行完成之后,继续回到原来的程序继续执行。
STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个用于产生事件/中断请求的边沿检测器。EXTI 的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发),还可独立地被屏蔽。
20 个中断/事件线对应连接的外设说明如下表:
STM32f103c8t6每个GPIO都可以产生中断,中断线有16个,中断服务函数最多有6个。
19个中断检测沿,16个中断线对应最多16个中断,但是cpu一次只能处理一个事件,所以就要对这些中断进行优先级排序。
中断线 0-4 每个中断线对应一个中断函数,中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,中断线 10-15 共用中断函数 EXTI15_10_IRQHandler。 使用 IO 口外部中断的一般步骤:
1)初始化 IO 口为输入。
2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3)初始化线上中断,设置触发条件等。
4)配置中断分组(NVIC),并使能中断。
5)编写中断服务函数。
硬件搭建
外部中断实验所用按键器模块及杜邦线需要另购,否则缺少重要配件,无法完成本节课程。
程序分析
中断初始化:
要使用外部中断,我们必须先对它进行上图配置。
EXTI 中断函数:
初始化 EXTI 后,中断就已经开启了,当任意按键按下后会触发一次中断, 这时程序就会进入中断服务函数执行。
主函数代码:
主函数实现的功能很简单,首先对 NVIC 进行分组,这里我们调用 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)函数,将 NVIC 分为 2 组即 抢占优先级和响应优先级都占 2 位。再对使用到的硬件端口时钟和 IO 口初始化,然后调用我们前面编写的 EXTI 的初始化函数。
我们在 My_EXTI_Init()函数内就已经把按键管脚映射到中断线上,并配置了相应的触发方式,当有按键按下,即会进入对应中断服务函数执行相应的功能程序,LED 的控制就在中断函数内完成的。
实验现象
程序下载完成之后,可以通过按键控制led灯的亮灭,按一下按键,led灯亮再按一下则熄灭。