OpenHarmony API-WifiIotIoName 和 WifiIotGpioIdx 区别

说明

在 OpenHarmony 物联网设备开发(如 Hi3861 等平台)中,WifiIotIoName 和 WifiIotGpioIdx 是两个与 GPIO 引脚标识相关的核心类型(通常为枚举类型),但它们的设计目的和使用场景不同,需根据具体接口选择使用。

1. WifiIotIoName:物理引脚名称枚举

WifiIotIoName 是对芯片物理引脚的直接命名枚举,每个值对应开发板上一个具体的物理引脚(如“第 x 号引脚”),其命名通常与硬件设计直接关联。

特点:

  • 映射物理引脚:直接对应开发板上可见的物理引脚,名称通常包含引脚的硬件编号(如 WIFI_IOT_IO_NAME_GPIO_9 对应物理上的 GPIO9 引脚)。
  • 涵盖所有功能引脚:不仅包括 GPIO,还可能包含电源、接地、专用接口引脚(如 UART、SPI 等),但常用的是其中以 GPIO_x 结尾的枚举值。
  • 用于功能配置:主要在 IoSetFunc 函数中使用,用于指定“哪个物理引脚”需要配置为某种功能(如通用 GPIO、I2C、UART 等)。

示例枚举值(简化版):

typedef enum {
    WIFI_IOT_IO_NAME_GPIO_0,    // 物理引脚GPIO0
    WIFI_IOT_IO_NAME_GPIO_1,    // 物理引脚GPIO1
    // ...
    WIFI_IOT_IO_NAME_GPIO_9,    // 物理引脚GPIO9
    WIFI_IOT_IO_NAME_UART0_TX,  // 专用UART0发送引脚(非GPIO复用)
    // 其他专用引脚...
} WifiIotIoName;

典型用法:

// 将物理引脚GPIO9配置为通用GPIO功能
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);

2. WifiIotGpioIdx:GPIO 逻辑索引枚举

WifiIotGpioIdx 是对已配置为通用 GPIO 功能的引脚的逻辑索引,用于简化 GPIO 操作接口的参数传递,其值通常与“GPIO 编号”直接对应(如 WIFI_IOT_GPIO_IDX_9 对应第 9 号 GPIO)。

特点:

  • 仅针对通用 GPIO:仅包含可作为 GPIO 使用的引脚,不包含专用接口引脚,是对“通用 GPIO 引脚”的逻辑编号。
  • 用于 GPIO 操作:主要在 GpioSetDir、GpioSetOutputVal、GpioGetInputVal 等 GPIO 专用函数中使用,标识“哪个 GPIO 引脚”需要进行方向设置或电平读写。
  • 与 WifiIotIoName 对应:通常 WIFI_IOT_GPIO_IDX_x 与 WIFI_IOT_IO_NAME_GPIO_x 是一一对应的(如 IDX_9 对应 NAME_GPIO_9)。

示例枚举值(简化版):

typedef enum {
    WIFI_IOT_GPIO_IDX_0,    // 第0号GPIO(对应物理引脚GPIO0)
    WIFI_IOT_GPIO_IDX_1,    // 第1号GPIO(对应物理引脚GPIO1)
    // ...
    WIFI_IOT_GPIO_IDX_9,    // 第9号GPIO(对应物理引脚GPIO9)
    // 其他GPIO索引...
} WifiIotGpioIdx;

典型用法:

// 设置第9号GPIO为输出模式
GpioSetDir(WIFI_IOT_GPIO_IDX_9, WIFI_IOT_GPIO_DIR_OUT);

// 控制第9号GPIO输出高电平
GpioSetOutputVal(WIFI_IOT_GPIO_IDX_9, 1);

3. 核心区别与使用场景

类型 本质 用途 典型函数
WifiIotIoName 物理引脚名称 配置引脚功能(复用为GPIO/其他接口) IoSetFunc
WifiIotGpioIdx 通用GPIO逻辑索引 对已配置为GPIO的引脚进行读写操作 GpioSetDir、GpioSetOutputVal

4. 关联与注意事项

  • 一一对应关系:对于可作为 GPIO 的引脚,WIFI_IOT_IO_NAME_GPIO_x 通常与 WIFI_IOT_GPIO_IDX_x 是对应的(x 为同一数字),例如 GPIO9 的物理名称是 WIFI_IOT_IO_NAME_GPIO_9,逻辑索引是 WIFI_IOT_GPIO_IDX_9。
  • 使用流程:配置 GPIO 时,需先通过 WifiIotIoName 确定物理引脚并配置为通用 GPIO 功能,再通过 WifiIotGpioIdx 对其进行方向设置和电平操作,例如:

    // 步骤1:将物理引脚GPIO9配置为通用GPIO功能
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
    
    // 步骤2:通过GPIO逻辑索引设置方向为输出
    GpioSetDir(WIFI_IOT_GPIO_IDX_9, WIFI_IOT_GPIO_DIR_OUT);
    
    // 步骤3:通过GPIO逻辑索引控制电平
    GpioSetOutputVal(WIFI_IOT_GPIO_IDX_9, 1); // 输出高电平
    

理解这两个类型的区别,是正确使用 OpenHarmony GPIO 接口的基础,避免在配置功能和操作引脚时混淆参数类型导致错误。


原文出处:/show_1GW1wISs2SQ4.html