GPIO

更新时间:2025-04-24 07:04:30下载pdf

概述

通用输入/输出端口(General Purpose I/O Ports,GPIO),即引脚,可以通过它们输出高低电平,或读入引脚的状态为高电平/低电平。

GPIO 模式

模式 枚举
上拉输入 TUYA_GPIO_PULLUP
下拉输入 TUYA_GPIO_PULLDOWN
高阻输入 TUYA_GPIO_HIGH_IMPEDANCE
浮空输入 TUYA_GPIO_FLOATING
推挽输出 TUYA_GPIO_PUSH_PULL
开漏输出 TUYA_GPIO_OPENDRAIN
开漏带上拉输出 TUYA_GPIO_OPENDRAIN_PULLUP

以上模式需要关注芯片本身是否支持,这里只是模式的最大集合。

API 描述

tkl_gpio_init

OPERATE_RET tkl_gpio_init(TUYA_GPIO_NUM_E pin_id, CONST TUYA_GPIO_BASE_CFG_T *cfg);
  • 功能描述:

    • GPIO 初始化
  • 参数:

    • pin_id:GPIO 引脚编号,此编号区别于芯片原始引脚号,是由涂鸦根据芯片 PA、PB … PN 上的引脚个数顺序往下编号的:

      名称 定义 备注
      TUYA_GPIO_NUM_0 引脚 0 起始编号
      TUYA_GPIO_NUM_1 引脚 1 -
      TUYA_GPIO_NUM_3 引脚 2 -
      引脚 n -
      TUYA_GPIO_NUM_60 引脚 60 最大编号
    • cfg:GPIO 基础配置,取值如下:

      typedef struct {
          TUYA_GPIO_MODE_E  mode;		// GPIO 模式
          TUYA_GPIO_DRCT_E  direct;	// GPIO 输入输出方向
          TUYA_GPIO_LEVEL_E level;	// GPIO 初始化电平
      } TUYA_GPIO_BASE_CFG_T;
      

      mode 定义如下:

      名称 定义
      TUYA_GPIO_PULLUP 上拉输入
      TUYA_GPIO_PULLDOWN 下拉输入
      TUYA_GPIO_HIGH_IMPEDANCE 高阻输入
      TUYA_GPIO_FLOATING 浮空输入
      TUYA_GPIO_PUSH_PULL 推挽输出
      TUYA_GPIO_OPENDRAIN 开漏输出
      TUYA_GPIO_OPENDRAIN_PULLUP 开漏带上拉输出

      direct 定义如下:

      名称 定义
      TUYA_GPIO_INPUT 输入模式
      TUYA_GPIO_OUTPUT 输出模式

      level 定义如下:

      名称 定义
      TUYA_GPIO_LEVEL_LOW 低电平
      TUYA_GPIO_LEVEL_HIGH 高电平
  • 返回值:

    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

tkl_gpio_deinit

OPERATE_RET tkl_gpio_deinit(TUYA_GPIO_NUM_E pin_id)
  • 功能描述:
    • GPIO 恢复初始状态
  • 参数:
    • pin_id:GPIO 引脚编号
  • 返回值:
    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

tkl_gpio_write

OPERATE_RET tkl_gpio_write(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E level);
  • 功能描述:
    • GPIO 输出电平
  • 参数:
    • pin_id:GPIO 引脚编号
    • level:GPIO 输出电平
  • 返回值:
    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

tkl_gpio_read

OPERATE_RET tkl_gpio_read(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E *level);
  • 功能描述:
    • GPIO 读取电平
  • 参数:
    • pin_id:GPIO 引脚编号
    • *level:GPIO 读取电平返回值
  • 返回值:
    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

tkl_gpio_irq_init

OPERATE_RET tkl_gpio_irq_init(TUYA_GPIO_NUM_E pin_id, CONST TUYA_GPIO_IRQ_T *cfg);
  • 功能描述:

    • GPIO 中断初始
  • 参数:

    • pin_id:GPIO 引脚编号

    • *cfg:GPIO 中断配置

    • cfg:GPIO 基础配置,取值如下:

      typedef struct {
          TUYA_GPIO_IRQ_E      mode;	// 中断模式
          TUYA_GPIO_IRQ_CB     cb;	// 中断回调函数
          VOID_T              *arg;	// 回调函数参数
      } TUYA_GPIO_IRQ_T;
      

      mode 定义如下:

      名称 定义
      TUYA_GPIO_IRQ_RISE 上升沿模式
      TUYA_GPIO_IRQ_FALL 下降沿模式
      TUYA_GPIO_IRQ_RISE_FALL 双边沿模式
      TUYA_GPIO_IRQ_LOW 低电平模式
      TUYA_GPIO_IRQ_HIGH 高电平模式

      cb 定义如下:

      typedef VOID_T (*TUYA_GPIO_IRQ_CB)(VOID_T *args);
      
  • 返回值:

    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

tkl_gpio_irq_enable

OPERATE_RET tkl_gpio_irq_enable(TUYA_GPIO_NUM_E pin_id);
  • 功能描述:
    • GPIO 中断使能函数
  • 参数:
    • pin_id:GPIO 引脚编号
  • 返回值:
    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

tkl_gpio_irq_disable

OPERATE_RET tkl_gpio_irq_disable(TUYA_GPIO_NUM_E pin_id);
  • 功能描述:
    • GPIO 中断失能函数
  • 参数:
    • pin_id:GPIO 引脚编号
  • 返回值:
    • OPRT_OK:成功
    • 其他请参考文件 tuya_error_code.hOPRT_OS_ADAPTER_GPIO_ERRCODE 定义部分

示例

示例一

// GPIO 初始化
VOID_T tuya_gpio_test(VOID_T)
{
    TUYA_GPIO_BASE_CFG_T cfg = {
        .mode = TUYA_GPIO_PUSH_PULL,
        .direct = TUYA_GPIO_OUTPUT,
        .level = TUYA_GPIO_LEVEL_LOW,
    };
	tkl_gpio_init(GPIO_NUM_3, &cfg);
    tkl_gpio_init(GPIO_NUM_4, &cfg);
    
    // GPIO 输出
    tkl_gpio_write(GPIO_NUM_3, TUYA_GPIO_LEVEL_HIGH);
    tkl_gpio_write(GPIO_NUM_4, TUYA_GPIO_LEVEL_HIGH);
}

示例二

// 中断回调函数
STATIC VOID __gpio_irq_callback7(VOID *args)
{
    //to do
}

STATIC VOID __gpio_irq_callback8(VOID *args)
{
     //to do
}
// GPIO 中断初始
VOID_T tuya_gpio_irq_test(VOID_T)
{
    TUYA_GPIO_IRQ_T irq_cfg_7 = {
        .mode = TUYA_GPIO_IRQ_RISE,
        .cb = __gpio_irq_callback7,
        .arg = NULL,
    };
    TUYA_GPIO_IRQ_T irq_cfg_8 = {
        .mode = TUYA_GPIO_IRQ_RISE,
        .cb = __gpio_irq_callback8,
        .arg = NULL,
    };
    tkl_gpio_irq_init(GPIO_NUM_7, &irq_cfg_7);
    tkl_gpio_irq_init(GPIO_NUM_8, &irq_cfg_8);
    tkl_gpio_irq_enable(GPIO_NUM_7);
    tkl_gpio_irq_enable(GPIO_NUM_8);
}