STM32L552开发板——外部中断

上回向大家介绍了如何使用gpio口的输出功能点亮一盏led灯,以及使用gpio口的输入功能读取按键的状态控制led的闪烁频率,然鹅,获取按键的状态采用的是主循环查询的方法,这有一个弊端,试想当主循环的循环周期非常长的时候,比如夸张点说要1秒,那就得一直按着按键等到程序扫描到按键的输入引脚后才能放开,这个等待时间最长需要1秒,这是很糟糕的,我可没有这个耐心去等,比如在将一个数从1调节到100的时候,那后果是可想而知的。为此,就有必要引入一个叫中断的神奇东西,程序中的中断,会把正在运行的普通程序或者低级的中断服务程序打断,先运行本中断服务函数内的程序,就好比我们日常生活中的突发事件,你正在洗衣服,突然快递小哥到你家门口了,你得放下手上的衣服先去取个快递,总不能让快递小哥在门口等你把衣服洗完吧。中断还有很多种分类,在普通的51单片机中有三类中断共五个中断源,分别是外部中断0和1、定时器中断0和1以及串口中断,而在stm32中的中断那可多了去了,比方说有gpio外部中断、定时器中断、串口中断、dma中断、adc中断等等等等,每个中断都有它独特的功能,而本次我们需要的就是这当中的gpio外部中断,好了,废话不多说,接下来我们就来研究研究stm32l552的外部中断是如何使用的。
评测内容
使用外部中断获取按键的状态,并调节led灯闪烁的频率。
所需元件
1、stm32l552zet6q;
2、板载红色led(ld3);
3、板载蓝色按键(user)。
评测步骤 01
将按键引脚配置成外部中断模式,打开上回创建的stm32cubemx工程,将芯片的pc13引脚按照步骤配置成下图所示的设置,第五步为设置程序中的引脚别名,可根据自己的需求进行设置
02
使能外部中断并设置中断优先级,按照下图所示步骤及内容设置,中断优先级可自己根据需要设置
03
保存工程并生成代码工程。
04
打开代码工程,发现main.c文件中的gpio口配置函数多了如下两行设置中山优先级和使能中断的代码
05
在stm32l5xx_it.c文件中也多了一段中断服务函数的代码
06
跳转到hal_gpio_exti_irqhandler函数的实现,该函数的内容如下
其中的hal_gpio_exti_rising_callback和hal_gpio_exti_falling_callback函数就是外部中断的回调函数,两个函数内分别有如下注释:
意思是这两个函数在用户需要的时候可以在用户文件上实现,实现的内容就是用户需要本次中断执行的内容。
07
回到main.c文件,添加如下函数的实现
user_button为一个全局变量,在文件开头进行定义:_bool user_button = 0;
08
在主函数的循环中添加如下代码;
一切就绪,重新编译连接并
下载到开发板上,按下按键观察程序运行情况,还是跟上回的一样,实现了使用外部中断检测按键对led的闪烁频率进行调节。
总结
得益于stm32cubemx的强大功能以及hal库的完美包装,外部中断的实现似乎并没有那么难(相比于标准固件库来说真的是简单了不少),只需要自己实现一个回调函数就好了,对快速开发是方便了不少。好了,本次评测就到此结束,感谢您的阅读。

石墨烯可以让触摸屏也变得柔软舒适
ADP2119/ADP2120应用电路 (5V输入3.3V输
高性能、低功耗音频IC AS3501/02(奥地利微电子)
未来三年对于区块链来说意味着什么
食用菌种植环境测控系统方案
STM32L552开发板——外部中断
新型电子传感器的开发,扩展了无人机的作战能力
又一家中国Mini LED厂商打入苹果供应链,Mini/Micro LED新玩家扎堆
一场国际大师助阵的手机摄影大赛,成了vivo的年末杀手锏
印刷电路板是如何被入侵的
基于NAND FLASH控制器的自启动方式实现SOC系统的设计
空气开关的功率表示 空气开关和漏电开关的区别
如何巧测磁电式微安表内阻
卫生间照明灯、换气扇自动控制器电路
光控闪光灯电路图
金山电池旗下新品牌“绿再”隆重上市 全面推动环保新生活
2023上海物流展、CeMAT物流展
边缘智能第3部分:边缘节点通信
该如何改进现有连接器,提升连接器性能?
5G网络的到来,全面提升体验让你看视频不再转圈圈