OpenHarmony API-WifiIotGpioIdx 枚举GPIO 硬件引脚索引

定义

/**
 * @brief Enumerates GPIO pin IDs.
 */
typedef enum {
    /** GPIO0 */
    WIFI_IOT_GPIO_IDX_0,
    /** GPIO1 */
    WIFI_IOT_GPIO_IDX_1,
    /** GPIO2 */
    WIFI_IOT_GPIO_IDX_2,
    /** GPIO3 */
    WIFI_IOT_GPIO_IDX_3,
    /** GPIO4 */
    WIFI_IOT_GPIO_IDX_4,
    /** GPIO5 */
    WIFI_IOT_GPIO_IDX_5,
    /** GPIO6 */
    WIFI_IOT_GPIO_IDX_6,
    /** GPIO7 */
    WIFI_IOT_GPIO_IDX_7,
    /** GPIO8 */
    WIFI_IOT_GPIO_IDX_8,
    /** GPIO9 */
    WIFI_IOT_GPIO_IDX_9,
    /** GPIO10 */
    WIFI_IOT_GPIO_IDX_10,
    /** GPIO11 */
    WIFI_IOT_GPIO_IDX_11,
    /** GPIO12 */
    WIFI_IOT_GPIO_IDX_12,
    /** GPIO13 */
    WIFI_IOT_GPIO_IDX_13,
    /** GPIO14 */
    WIFI_IOT_GPIO_IDX_14,
    /** Maximum value */
    WIFI_IOT_GPIO_IDX_MAX,
} WifiIotGpioIdx;

头文件

\\base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio.h

1. 枚举值的核心含义

这些枚举值是对芯片上“通用 GPIO 引脚”的逻辑编号,直接对应硬件上的 GPIO 引脚编号,例如:

  • WIFI_IOT_GPIO_IDX_0 对应第 0 号 GPIO 引脚
  • WIFI_IOT_GPIO_IDX_9 对应第 9 号 GPIO 引脚
  • …以此类推,直到 WIFI_IOT_GPIO_IDX_14

末尾的 WIFI_IOT_GPIO_IDX_MAX 是一个特殊值,不对应实际引脚,主要用于:

  • 作为 GPIO 引脚总数的边界判断(例如循环遍历所有 GPIO 时作为终止条件)
  • 检查用户输入的 GPIO 索引是否合法(若索引 >= WIFI_IOT_GPIO_IDX_MAX,则为无效值)

2. 关键特性与用途

  • 仅适用于通用 GPIO 模式:这些枚举值仅在引脚被配置为“通用 GPIO 功能”(如 WIFI_IOT_IO_FUNC_GPIO_9_GPIO)时有效,若引脚被复用为其他功能(如 I2C、UART),则无需使用这些索引。
  • GPIO 操作的“身份证”:是 GpioSetDir(设置方向)、GpioSetOutputVal(设置输出电平)、GpioGetInputVal(读取输入电平)等函数的核心参数,用于指定操作的目标 GPIO 引脚。
  • 跨函数一致性:同一 GPIO 引脚的索引在所有 GPIO 操作函数中保持一致(例如 GPIO9 始终用 WIFI_IOT_GPIO_IDX_9 标识)。

3. 典型使用流程示例

以控制 GPIO9 输出高低电平为例,完整流程需结合引脚功能配置和索引操作:

#include "gpio_if.h"
#include "wifiiot_gpio.h"

void Gpio9Example(void) {
    // 步骤1:将物理引脚GPIO9配置为通用GPIO功能
    // (使用对应的WifiIotIoName枚举)
    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);

    // 步骤4:延迟后输出低电平
    usleep(1000000); // 延迟1秒
    GpioSetOutputVal(WIFI_IOT_GPIO_IDX_9, 0);
}

4. 注意事项

  • 与物理引脚的对应关系:WIFI_IOT_GPIO_IDX_x 中的 x 通常与物理引脚编号直接对应(如 IDX_9 对应物理上的 GPIO9 引脚),但具体需参考开发板的引脚定义表(部分芯片可能存在映射差异)。
  • 合法性检查:调用 GPIO 函数前,需确保使用的索引 < WIFI_IOT_GPIO_IDX_MAX,否则会返回错误(如 -1)。例如:
    if (gpioIdx >= WIFI_IOT_GPIO_IDX_MAX) {
        // 无效的GPIO索引,处理错误
    }
    
  • 功能冲突避免:若某引脚已被复用为其他功能(如 I2C_SCL),则不应再用其对应的 WifiIotGpioIdx 进行 GPIO 操作,否则会导致功能异常。

这些枚举值的设计简化了 GPIO 操作的参数传递,使开发者无需记忆硬件寄存器地址,只需通过逻辑索引即可操作对应引脚,是 OpenHarmony 物联网设备开发中 GPIO 编程的基础。


原文出处:/show_1GW1wIVb9NbH.html