说明
在 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 接口的基础,避免在配置功能和操作引脚时混淆参数类型导致错误。