【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- GPIO设置 -- 从初始化到中断处理的深入解析 --(七)

请添加图片描述

  • 💌 所属专栏:【BES2500x系列】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

请添加图片描述


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【BES2500x系列】专栏的第7篇文章;
  今天开始学习BES2500x系列的一天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【BES2500x系列】, 此专栏是我是夜阑的狗对BES2500x系列开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


<<【系列文章索引】>>

1 介绍

  前面已经介绍了GPIO的基础概念和GPIO 在RTOS 中管理。接下来就来讲解一下GPIO设置 – 从初始化到中断处理的深入解析吧。话不多说,让我们原文再续,书接上回吧。

在这里插入图片描述

  通用输入/输出(General Purpose Input/Output,简称GPIO)是嵌入式系统中最为基础且强大的功能之一,它允许开发者直接控制硬件引脚的状态(高电平或低电平),从而实现与外部设备的简单通信或控制。本文旨在详细介绍GPIO的两个核心操作:初始化和中断设置,通过实践案例帮助读者快速掌握GPIO的应用技巧。

2 GPIO初始化

  在开始之前,了解GPIO的基本概念至关重要。每个GPIO引脚都可配置为输入或输出模式,用于读取外部信号或向外部设备发送信号。此外,GPIO引脚还支持多种附加功能,如中断、上拉/下拉电阻等。

2.1 硬件准备

  确保硬件连接正确,包括GPIO引脚与外设的物理连接。了解所用开发板的GPIO引脚布局,选择合适的引脚进行实验。

2.2 软件初始化

  这里以按键为例,初始化GPIO涉及以下几个关键步骤:

  Step 1、引脚复用配置:若GPIO引脚具有复用功能(如串口、I2C等),需根据需求设置其为GPIO模式。
  Step 2、模式设置:配置GPIO为输入或输出模式。

  • 代码
/**
 * @brief 设置GPIO复用测试,用于按键检测。
 *
 * 此函数配置GPIO P0_3为GPIO功能,电压等级为VIO并启用上拉电阻,
 * 之后将其设置为输出方向。这通常用于测试或模拟按键输入。
 */
void hal_gpiomux_set_test(void)
{
    // 定义GPIO复用功能映射结构体,用于按键测试
    const struct HAL_IOMUX_PIN_FUNCTION_MAP app_key_test_cfg = {
        HAL_IOMUX_PIN_P0_3,      // GPIO引脚P0_3
        HAL_IOMUX_FUNC_AS_GPIO,  // 配置为GPIO功能
        HAL_IOMUX_PIN_VOLTAGE_VIO, // 设置电压等级为VIO
        HAL_IOMUX_PIN_PULLUP_ENABLE // 启用上拉电阻
    };

    // 初始化指定的GPIO复用设置
    hal_iomux_init((struct HAL_IOMUX_PIN_FUNCTION_MAP *)&app_key_test_cfg, 1);

    // 将GPIO引脚设置为输出方向,并默认输出高电平
    hal_gpio_pin_set_dir((enum HAL_GPIO_PIN_T)app_key_test_cfg.pin, HAL_GPIO_DIR_OUT, 1);
}
  • 参数/函数讲解
序号参数/函数说明
1hal_iomux_init用于初始化 IOMUX模块的,初始化 IOMUX 的目的是为了配置引脚的复用功能,确保它们能够正确地与选定的外设接口通信。
2hal_gpio_pin_set_dir用来设置 GPIO (General Purpose Input/Output) 引脚的方向,即决定引脚是作为输入还是输出

2.3 设置中断钩子函数

  GPIO中断允许系统在引脚状态变化时自动执行预先定义的函数,无需持续轮询,大大节省CPU资源。中断分为上升沿、下降沿或两者同时触发。
  配置GPIO中断一般包括:

序号参数/函数说明
1中断使能全局中断和GPIO中断使能。
2中断模式设置确定触发中断的条件(上升沿、下降沿或双沿)
3去抖动配置去抖动时间,避免因接触不良引起的误中断
4中断服务函数(ISR)编写中断处理逻辑的函数,当中断发生时由系统调用。
5注册中断将ISR与特定GPIO引脚关联,并配置中断优先级
  • 代码
/**
 * @brief 启用GPIO按键中断并配置中断参数。
 *
 * 此函数用于配置指定GPIO引脚的中断功能,以响应按键事件。
 * 参数包括:启用中断、启用去抖动、设置上升沿触发(高电平有效)、
 * 指定中断处理函数以及选择电平敏感型中断。
 *
 * @param pin GPIO引脚编号,用于连接按键
 * @param polarity 中断触发极性,决定了按键按下时中断何时被触发
 */
static void hal_gpiokey_enable_irq(enum HAL_GPIO_PIN_T pin, enum HAL_GPIO_IRQ_POLARITY_T polarity)
{
    // 定义GPIO中断配置结构体
    struct HAL_GPIO_IRQ_CFG_T gpiocfg;

    // 配置中断参数
    gpiocfg.irq_enable = true;                // 启用中断
    gpiocfg.irq_debounce = true;              // 启用去抖动功能
    gpiocfg.irq_polarity = polarity;          // 设置中断触发极性
    gpiocfg.irq_handler = hal_gpiokey_irqhandler; // 中断服务函数
    gpiocfg.irq_type = HAL_GPIO_IRQ_TYPE_LEVEL_SENSITIVE; // 选择电平敏感型中断

    // 根据配置参数设置GPIO中断
    hal_gpio_setup_irq(pin, &gpiocfg);
}

  通过上述介绍和示例,我们不仅掌握了GPIO的初始化方法,还学会了如何设置中断,为开发更复杂的嵌入式应用打下了坚实的基础。实践中,根据具体的硬件平台和需求,细节可能有所差异,但基本原理和流程大同小异。

  • 参数/函数讲解
序号参数/函数说明
1hal_gpio_setup_irq根据配置参数设置GPIO中断

3 GPIO功能状态

  GPIO的功能状态可以根据需要在输入和输出之间切换,并且还可以配置为不同的工作模式。以下是一些常见的功能状态:

3.1 输入模式

  • 浮空输入(GPIO_Mode_IN_FLOATING):引脚不连接任何内部上拉或下拉电阻,其状态取决于外部电路。
  • 上拉/下拉输入(GPIO_Mode_IPU/IPD):可以设置内部上拉或下拉电阻,增强抗干扰能力。

3.2 输出模式

  • 推挽输出(GPIO_Mode_Out_PP):输出信号可以驱动负载,有高电平和低电平两种状态。
  • 开漏输出(GPIO_Mode_Out_OD):不提供内部上拉,需要外部上拉电阻才能形成高电平。

3.3 边沿检测

  在输入模式下,GPIO还可以配置为检测上升沿、下降沿或两者,这在中断驱动的应用中非常有用。

3.4 模拟输入

  某些GPIO引脚还可以配置为模拟输入(GPIO_Mode_AIN),用于连接模拟信号源。正确配置和使用GPIO是嵌入式系统开发中的基础技能。理解初始化过程和功能状态的设置,可以帮助开发者灵活地控制和监测外部硬件,实现各种复杂的应用场景。在实际项目中,务必参考特定MCU的参考手册以获取详细的寄存器配置信息。

<<【系列文章索引】>>

请添加图片描述


总结

  感谢观看,这里就是 配置篇 – GPIO设置的讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:



订阅更多,你们将会看到更多的优质内容!!

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是夜阑的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值