![7503943b8d332be8c2a3c31f9ebc9c70.png](https://i-blog.csdnimg.cn/blog_migrate/680d338431f1106fa673291ac4f8cb7d.jpeg)
![7f5c2f674a7218184558dae354aab608.png](https://i-blog.csdnimg.cn/blog_migrate/8be9460eaec5a948f6045609eeeaffb8.jpeg)
在上一讲中,我们介绍了Tilen Majerle写的关于GPIO控制的第三方库,这一节中我会介绍他写的关于EXTI外部中断的三方库,并尝试解读一下他的部分代码学习一下编程理念。
本EXTI库的源文件在下面这个下载链接中
tm_stm32_exti.zip089u.com(本人使用的开发板是STM32F429IDISCOVERY,使用的IDE是STM32CubeIDE,程序编译顺利并运行正常)
什么是EXTI(External Interrupts)外部中断
外部中断/事件控制器(EXTI)负责管理和配置控制器的中断/事件线,并且每个中断/事件线对应一个边沿检测器,可以实现对输入信号的上升沿(rising edge on line)和下降沿(falling edge on line)的检测
为什么要使用TM的EXTI库
如果使用官方HAL库配置GPIO口外部中断的话,需要先开启GPIO口时钟频率,配置GPIO口的输入模式引脚,然后设置EXTI的中断优先级以及使能中断;相对而言使用TM的EXTI库的话,只需要一个语句就配置好了,第三方库函数会自动开启GPIO口时钟频率,自动配置输入模式引脚以及开启中断,一切显得快速简单。
如何配置TM的EXTI库
- 首先根据芯片选型在defines.h头文件中定义所用的芯片型号
//STM32F4xx
- 在tm_stm32_exti.h头文件中根据芯片选型引用对应的hal头文件
//STM32F4xx
- TM的EXTI库依赖于TM的GPIO库,所以在main.h头文件中需要引用tm_stm32_gpio.h和 tm_stm32_exti.h并编译程序,如果没有编译错误的话则表示配置成功
![dd2f6262440d784f1d274db20041f43d.png](https://i-blog.csdnimg.cn/blog_migrate/1330e0348a2e1dda1bbcb1a4134bc819.jpeg)
TM的EXTI库的枚举类型
//函数返回值的枚举
TM的EXTI库的函数和宏
//函数功能:链接外部中断到GPIO口
示例程序
开发板STM32F429IDISCOVERY的Pin13和Pin14分别连接了个Led灯
....
运行效果为连接GPIO_Pin_13的灯常亮表示链接外部中断成功,连接GPIO_Pin_14的灯每隔1秒闪烁
解读代码
TM_EXTI_Result_t
这段代码在选择上升沿触发时(TM_EXTI_Trigger_Rising)配置了GPIO口的下拉电阻,在选择下降沿触发时(TM_EXTI_Trigger_Falling)配置GPIO口上拉电阻,并初始化了GPIO口。
__weak
这段代码中TM_EXTI_Handler(uint16_t GPIO_Pin)是一个弱符号__weak修饰的函数,当用户代码实现这个函数时,编译时就会链接用户实现的函数,就如在示例代码中那样。当外部中断发生时,在中断服务函数中都会调用TM_EXTI_Handler(uint16_t GPIO_Pin)这个函数从而实现用户定义的功能。