nrf52840 gpiote如何配置中断输入_STM32的HAL第三方库介绍2-EXTI中断

7503943b8d332be8c2a3c31f9ebc9c70.png
奔腾的心:STM32的HAL第三方库介绍1-GPIO控制​zhuanlan.zhihu.com
7f5c2f674a7218184558dae354aab608.png

在上一讲中,我们介绍了Tilen Majerle写的关于GPIO控制的第三方库,这一节中我会介绍他写的关于EXTI外部中断的三方库,并尝试解读一下他的部分代码学习一下编程理念。

本EXTI库的源文件在下面这个下载链接中

tm_stm32_exti.zip​089u.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

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)这个函数从而实现用户定义的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码涉及到了与 GPIO(General Purpose Input/Output,通用输入输出)相关的操作。让我逐步解释每个步骤的作用: 1. `if(!nrf_drv_gpiote_is_init())`: 检查 GPIO 驱动是否已经初始化。如果没有初始化,则执行下面的操作。 2. `nrf_drv_gpiote_init()`: 初始化 GPIO 驱动。该函数会初始化与 GPIO 相关的硬件资源。 3. `nrf_drv_gpiote_in_config_t gpiote_in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);`: 创建一个名为 `gpiote_in_config` 的 `nrf_drv_gpiote_in_config_t` 类型的变量,并将其配置为下降沿触发模式。具体的配置取决于实际需求,这里的配置为低电平触发模式。 4. `nrf_drv_gpiote_in_init(D_GPIOTE_WAKE_UP_PIN, &gpiote_in_config, gpiote_evt_handler);`: 初始化一个 GPIO 输入引脚,使用先前配置的 `gpiote_in_config` 变量和名为 `gpiote_evt_handler` 的事件处理函数。这个函数会将 GPIO 引脚与指定的事件处理函数关联起来。 5. `nrf_drv_gpiote_in_event_enable(D_GPIOTE_WAKE_UP_PIN, true);`: 启用指定 GPIO 输入引脚的事件触发功能。第二个参数 `true` 表示启用触发,使得当引脚状态满足触发条件时,会触发相应的事件。 6. `nrf_drv_gpiote_in_init(D_GPIOTE_CALIBRATE_PIN, &gpiote_in_config, gpiote_evt_handler);`: 初始化另一个 GPIO 输入引脚,使用相同的配置和事件处理函数。 7. `nrf_drv_gpiote_in_event_enable(D_GPIOTE_CALIBRATE_PIN, true);`: 启用第二个 GPIO 输入引脚的事件触发功能。 8. `return D_OK;`: 返回一个名为 `D_OK` 的状态码,表示函数执行成功。 综上所述,这段代码的作用是初始化 GPIO 驱动(如果尚未初始化),然后通过配置和初始化两个 GPIO 输入引脚,并启用它们的事件触发功能。最后返回执行成功的状态码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值