定义
/**
* @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 编程的基础。