本文主要学习使用stm32外部中断。用stm32F103核心板的GPIOB端一管脚接一个LED,GPIOA端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
本文目录
一、中断简介
1.中断是什么呢?
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
中断分为同步中断和异步中断。
- 同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断
- 异步中断——异步中断是由其他硬件设备依照 CPU 时钟信号随机产生的。
2.中断的基本概念
数据传输方式
处理器和外部设备的数据传输方式分为
- 无条件传输
- 查询方式
- 中断方式
- 直接寄存器方式
中断的全过程:
如下图所示,中断发生----->中断处理----->中断返回
3.中断的作用
中断程序执行过程示意图
- 中断处理是指CPU响应中断,转入中断处理程序,系统开始处理中断。
- 中断响应是指CPU收到中断请求后转向相应的事件处理程序。
- 中断屏蔽是指在中断请求产生后,系统用软件方式有选择地封锁部分中断而允许其余部分中断仍能得到响应。
开中断后,系统就可以响应其他的中断了,关中断后,系统不响应其他的中断除非优先级高的中断。
4.中断的类型及优先级
中断的类型
- 硬中断:通过处理器中断信号线产生的中断
- 软中断:通过非法指令或特殊指令触发的中断
中断优先级
- 多个中断同时出现时,处理器先响应高优先级的中断
- 低优先级中断的ISR执行时,可以被高优先级中断再次打断
- ISR比App Code拥有更高的执行优先级
二、CubeMX初始相关配置
1.实验要求:
用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
选用STM32F103C8T6芯片,然后进行配置。
2.时钟配置
高速外部时钟的时钟树具体配置如下:
3.GPIO配置
- PA1 配置为外部时钟触发引脚:设置按键引脚PA1,设置引脚为外部中断功能,PA1与外部中断线EXIT1连接GPIO_EXIT1
- PB5配置为LED控制输出引脚:设置指示灯LED引脚PB5,设置引脚模式为输出模式GPIO_Output
4.外部中断配置与使能
外部中断触发方式
- 上升沿触发
- 下降沿触发
- 上升/下降沿(双边沿)触发
外部中断配置:
NVIC外部中断使能需要点击Enabled
配置好后将文件导出即可。
三、代码编写
1.外部中断服务程序
2.外部中断通用处理函数
3.回调函数
在main函数下面编写。
主要代码编写完毕后,进行编译,没有错误
四、点亮LED
将代码下载到STM32F103C8T6,进行点灯实验。
实验结果展示如下:
点灯视频
五、总结
本文主要学习了如何使用stm32外部中断点亮LED。期间,我对中断的概念及作用,还有中断的优先级有了更一步的了解。
在配置STM32cubeMX时,需要对外部中断进行配置和使能,不然无法使用外部中断。配置引脚时,也应该先查使用手册,确定好引脚的选择。而且中断方式不必等待数据的传输过程,只需要在每字节数据收发完成后,由中断标志位触发中断,在做项目时,中断的这个特点可以大大简便项目的设计。
本次实验让我对中断有了更深刻的认识,收获满满。
六、参考资料
https://blog.csdn.net/qq_46467126/article/details/121055475?spm=1001.2014.3001.5502