外部中断实验
一、实验目的
1、进一步熟悉 STM32 芯片I/O 口的配置方法,
2、掌握用库函数实验中断的流程:
3、能够熟练应用编写中断函数
4、掌握 STM32 中断的基本操作。
二、实验内容
1.外部中断相关知识,
2.如何使用 STM32cubeide 进行编程完成功能,按键中断控制 LED 灯亮灭
三、实验设备
一套stm32实验设备、头歌教学平台
四、实验原理及说明
外部中断( EXTI )是 STM32 芯片实时处理外部事件的一种机制,由于中断请求来自于 GPIO 端口的引脚, 所以称之为外部中断。
中断就是cpu在执行程序时,有其他事件需要占用cpu,cpu接收到这个中断请求后暂停原程序的执行,去执行中断函数,中断函数执行完成之后,继续回到原来的程序继续执行。
c8t6每个GPIO都可以产生中断,中断线有16个,中断服务函数最多有6个。
中断的作用:
1.中断能让 CPU 同时执行多项任务,例如 CPU 在执行流水灯程序,就无法执行“按下按键时,蜂鸣器发声”的功能。
2.当然上面的例子可以用软件轮询检测按键是否被按下,但这样就消耗了 CPU 一部分资源来轮询检测按键是否有按下了,所以中断的另一个优点就是节省 CPU 资源。
只要程序中有中断,那么就必须设置中断优先级。在一个程序中,可能存在有多个中断,因此在对中断进行配置之前,需要了解一个很重要的概念:STM32 NVIC 中断优先级管理,程序员通过控制与 NVIC 相关的寄存器,从而使中断有序的执行。
在NVIC 中断优先级管理中,又有三个重要的概念:中断分组,抢占优先级,响应优先级。
STM32 的中断分组: STM32 将中断分为 5 个组,组 0-4。
抢占优先级的级别高于响应优先级,而数值越小所代表的优先级就越高。
这里需要注意两点:
第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
其图解如下所示:


本实验功能是使用 SW2 控制 LED3 的亮灭,按键与 LED 的原理图如下:
由上图可知,本实验主要设置管脚 PB12 和管脚 PB14。
五、实验步骤
1.1双击打开软件STM32CubeIde
1.2开始创建工程
1.3 1.3 搜索芯片STM32F103C8T6,并选择芯片型号 STM32F103C8T6 ,并点击“start project”创建工程。

1.4输入工程名字NVIC

1.5设置外部时钟源

1.6设置调试模式

1.7配置时钟为72MHz


1.8配置管脚



1.9配置NVIC功能

1.10配置完成,生成代码


1.11 进入main.c文件完成代码的编写

任务代码
1.12 在合适位置添加函数void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),使得:
SW2 控制 LED3 的亮灭
示例代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
}
1.13 生成hex文件



编程要求
根据提示,在右侧编辑器补充代码,成功生成hex文件。
测试说明
点击评测,平台会对你编写的代码进行测试。
评测通过后下载生成的 hex 文件,进行下一步的操作。

此时点击“评测”系统将自行进行评测您的功能是否完成。