这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

GPIO

简介

GPIO (General-porpose input/output)是指通用输入输出端口的简称。可以通过软件控制其输出和输入。对于输入,可以通过pullmode来配置默认电压,对于输出,可以通过写寄存器让这个引脚输出高电位或者低电位。

功能列表

  1. 初始化——初始化驱动。

  2. 配置方向——设置GPIO引脚的方向(输入或输出)。

  3. 设置拉模式——配置GPIO引脚的上拉、下拉或浮空模式。

  4. 数据Read——从GPIO引脚读取数据。

  5. 数据write——写数据到GPIO引脚,其中1为拉高,0为拉低。

  6. 引脚复用——选择IOMUX引脚复用。

  7. 使能中断——使能GPIO中断。

  8. 设置中断模式——配置GPIO中断模式。

功能概述

W800具有48个GPIO引脚,通过IO MUX可配置复用关系,具体关系如下图,其中FUNC1-FUNC4为数字复用,FUNC5为GPIO,FUNC6-FUNC7为模拟复用,需注意:当作为模拟复用的时候,该引脚需要被配置为输入悬空.

下表提供了各引脚复用信息。

GPIO

FUNC1

FUNC2

FUNC3

FUNC4

FUNC5

FUNC6

FUNC7

GPIO0

WM_IO_MUX_GPIO0_FUNC_I2S_MCLK

WM_IO_MUX_GPIO0_FUNC_LSPI_CS

WM_IO_MUX_GPIO0_FUNC_PWM2

WM_IO_MUX_GPIO0_FUNC_I2S_DO

WM_IO_MUX_GPIO0_FUNC_GPIO

GPIO1

WM_IO_MUX_GPIO1_FUNC_JATG_CK

WM_IO_MUX_GPIO1_FUNC_I2C_SCL

WM_IO_MUX_GPIO1_FUNC_PWM3

WM_IO_MUX_GPIO1_FUNC_I2S_LRCK

WM_IO_MUX_GPIO1_FUNC_GPIO

WM_IO_MUX_GPIO1_FUNC_ADC_0

GPIO2

WM_IO_MUX_GPIO2_FUNC_UART1_RTS

WM_IO_MUX_GPIO2_FUNC_UART2_TX

WM_IO_MUX_GPIO2_FUNC_PWM0

WM_IO_MUX_GPIO2_FUNC_UART3_RTS

WM_IO_MUX_GPIO2_FUNC_GPIO

WM_IO_MUX_GPIO2_FUNC_ADC_3

GPIO3

WM_IO_MUX_GPIO3_FUNC_UART1_CTS

WM_IO_MUX_GPIO3_FUNC_UART2_RX

WM_IO_MUX_GPIO3_FUNC_PWM1

WM_IO_MUX_GPIO3_FUNC_UART3_CTS

WM_IO_MUX_GPIO3_FUNC_GPIO

WM_IO_MUX_GPIO3_FUNC_ADC_2

GPIO4

WM_IO_MUX_GPIO4_FUNC_JATG_SWO

WM_IO_MUX_GPIO4_FUNC_I2C_SDA

WM_IO_MUX_GPIO4_FUNC_PWM4

WM_IO_MUX_GPIO4_FUNC_I2S_BCK

WM_IO_MUX_GPIO4_FUNC_GPIO

WM_IO_MUX_GPIO4_FUNC_ADC_1

GPIO5

WM_IO_MUX_GPIO5_FUNC_UART3_TX

WM_IO_MUX_GPIO5_FUNC_UART2_RTS

WM_IO_MUX_GPIO5_FUNC_PWM_BREAK

WM_IO_MUX_GPIO5_FUNC_UART4_RTS

WM_IO_MUX_GPIO5_FUNC_GPIO

GPIO6

WM_IO_MUX_GPIO6_FUNC_UART3_RX

WM_IO_MUX_GPIO6_FUNC_UART2_CTS

WM_IO_MUX_GPIO6_FUNC_UART4_CTS

WM_IO_MUX_GPIO6_FUNC_GPIO

WM_IO_MUX_GPIO6_FUNC_LCD_SEG31

WM_IO_MUX_GPIO6_FUNC_VRP_EXT

GPIO7

WM_IO_MUX_GPIO7_FUNC_PWM4

WM_IO_MUX_GPIO7_FUNC_LSPI_MOSI

WM_IO_MUX_GPIO7_FUNC_I2S_MCK

WM_IO_MUX_GPIO7_FUNC_I2S_DI

WM_IO_MUX_GPIO7_FUNC_GPIO

WM_IO_MUX_GPIO7_FUNC_LCD_SEG3

GPIO8

WM_IO_MUX_GPIO8_FUNC_PWM_BREAK

WM_IO_MUX_GPIO8_FUNC_UART4_TX

WM_IO_MUX_GPIO8_FUNC_UART5_TX

WM_IO_MUX_GPIO8_FUNC_I2S_BCLK

WM_IO_MUX_GPIO8_FUNC_GPIO

WM_IO_MUX_GPIO8_FUNC_LCD_SEG4

GPIO9

WM_IO_MUX_GPIO9_FUNC_MMC_CLK

WM_IO_MUX_GPIO9_FUNC_UART4_RX

WM_IO_MUX_GPIO9_FUNC_UART5_RX

WM_IO_MUX_GPIO9_FUNC_I2S_LRCLK

WM_IO_MUX_GPIO9_FUNC_GPIO

WM_IO_MUX_GPIO9_FUNC_LCD_SEG5

WM_IO_MUX_GPIO9_FUNC_TOUCH1

GPIO10

WM_IO_MUX_GPIO10_FUNC_MMC_CMD

WM_IO_MUX_GPIO10_FUNC_UART4_RTS

WM_IO_MUX_GPIO10_FUNC_PWM0

WM_IO_MUX_GPIO10_FUNC_I2S_DO

WM_IO_MUX_GPIO10_FUNC_GPIO

WM_IO_MUX_GPIO10_FUNC_LCD_SEG6

WM_IO_MUX_GPIO10_FUNC_TOUCH2

GPIO11

WM_IO_MUX_GPIO11_FUNC_MMC_DAT0

WM_IO_MUX_GPIO11_FUNC_UART4_CTS

WM_IO_MUX_GPIO11_FUNC_PWM1

WM_IO_MUX_GPIO11_FUNC_I2S_DI

WM_IO_MUX_GPIO11_FUNC_GPIO

WM_IO_MUX_GPIO11_FUNC_LCD_SEG7

GPIO12

WM_IO_MUX_GPIO12_FUNC_MMC_DAT1

WM_IO_MUX_GPIO12_FUNC_UART5_TX

WM_IO_MUX_GPIO12_FUNC_PWM2

WM_IO_MUX_GPIO12_FUNC_GPIO

WM_IO_MUX_GPIO12_FUNC_LCD_SEG8

WM_IO_MUX_GPIO12_FUNC_TOUCH_CAP_CMOD

GPIO13

WM_IO_MUX_GPIO13_FUNC_MMC_DAT2

WM_IO_MUX_GPIO13_FUNC_UART5_RX

WM_IO_MUX_GPIO13_FUNC_PWM3

WM_IO_MUX_GPIO13_FUNC_GPIO

WM_IO_MUX_GPIO13_FUNC_LCD_SEG9

GPIO14

WM_IO_MUX_GPIO14_FUNC_MMC_DAT3

WM_IO_MUX_GPIO14_FUNC_UART5_CTS

WM_IO_MUX_GPIO14_FUNC_PWM4

WM_IO_MUX_GPIO14_FUNC_GPIO

WM_IO_MUX_GPIO14_FUNC_LCD_SEG10

WM_IO_MUX_GPIO14_FUNC_TOUCH_CAP_CDC

GPIO15

WM_IO_MUX_GPIO15_FUNC_PSRAM_CK

WM_IO_MUX_GPIO15_FUNC_UART5_RTS

WM_IO_MUX_GPIO15_FUNC_PWM_BREAK

WM_IO_MUX_GPIO15_FUNC_GPIO

WM_IO_MUX_GPIO15_FUNC_LCD_SEG11

GPIO16

WM_IO_MUX_GPIO16_FUNC_PWM0

WM_IO_MUX_GPIO16_FUNC_LSPI_MISO

WM_IO_MUX_GPIO16_FUNC_UART3_TX

WM_IO_MUX_GPIO16_FUNC_PSRAM_CK

WM_IO_MUX_GPIO16_FUNC_GPIO

WM_IO_MUX_GPIO16_FUNC_LCD_SEG12

WM_IO_MUX_GPIO16_FUNC_TOUCH3

GPIO17

WM_IO_MUX_GPIO17_FUNC_PWM1

WM_IO_MUX_GPIO17_FUNC_LSPI_CK

WM_IO_MUX_GPIO17_FUNC_UART3_RX

WM_IO_MUX_GPIO17_FUNC_PSRAM_CS

WM_IO_MUX_GPIO17_FUNC_GPIO

WM_IO_MUX_GPIO17_FUNC_LCD_SEG13

WM_IO_MUX_GPIO17_FUNC_TOUCH4

GPIO18

WM_IO_MUX_GPIO18_FUNC_PWM2

WM_IO_MUX_GPIO18_FUNC_LSPI_CK

WM_IO_MUX_GPIO18_FUNC_UART2_TX

WM_IO_MUX_GPIO18_FUNC_PSRAM_D0

WM_IO_MUX_GPIO18_FUNC_GPIO

WM_IO_MUX_GPIO18_FUNC_LCD_SEG14

WM_IO_MUX_GPIO18_FUNC_TOUCH5

GPIO19

WM_IO_MUX_GPIO19_FUNC_PWM3

WM_IO_MUX_GPIO19_FUNC_LSPI_MISO

WM_IO_MUX_GPIO19_FUNC_UART2_RX

WM_IO_MUX_GPIO19_FUNC_PSRAM_D1

WM_IO_MUX_GPIO19_FUNC_GPIO

WM_IO_MUX_GPIO19_FUNC_LCD_SEG15

WM_IO_MUX_GPIO19_FUNC_TOUCH6

GPIO20

WM_IO_MUX_GPIO20_FUNC_LSPI_CS

WM_IO_MUX_GPIO20_FUNC_UART2_RTS

WM_IO_MUX_GPIO20_FUNC_UART4_TX

WM_IO_MUX_GPIO20_FUNC_PSRAM_D2

WM_IO_MUX_GPIO20_FUNC_GPIO

WM_IO_MUX_GPIO20_FUNC_LCD_SEG16

WM_IO_MUX_GPIO20_FUNC_TOUCH7

GPIO21

WM_IO_MUX_GPIO21_FUNC_LSPI_MOSI

WM_IO_MUX_GPIO21_FUNC_UART2_CTS

WM_IO_MUX_GPIO21_FUNC_UART4_RX

WM_IO_MUX_GPIO21_FUNC_PSRAM_D3

WM_IO_MUX_GPIO21_FUNC_GPIO

WM_IO_MUX_GPIO21_FUNC_LCD_SEG17

WM_IO_MUX_GPIO21_FUNC_TOUCH8

GPIO22

WM_IO_MUX_GPIO22_FUNC_UART1_TX

WM_IO_MUX_GPIO22_FUNC_MMC_CLK

WM_IO_MUX_GPIO22_FUNC_HSPI_CK

WM_IO_MUX_GPIO22_FUNC_SDIO_CK

WM_IO_MUX_GPIO22_FUNC_GPIO

WM_IO_MUX_GPIO22_FUNC_LCD_SEG18

WM_IO_MUX_GPIO22_FUNC_TOUCH9

GPIO23

WM_IO_MUX_GPIO23_FUNC_UART1_RX

WM_IO_MUX_GPIO23_FUNC_MMC_CMD

WM_IO_MUX_GPIO23_FUNC_HSPI_INT

WM_IO_MUX_GPIO23_FUNC_SDIO_CMD

WM_IO_MUX_GPIO23_FUNC_GPIO

WM_IO_MUX_GPIO23_FUNC_LCD_SEG19

WM_IO_MUX_GPIO23_FUNC_TOUCH10

GPIO24

WM_IO_MUX_GPIO24_FUNC_I2S_BCK

WM_IO_MUX_GPIO24_FUNC_MMC_D0

WM_IO_MUX_GPIO24_FUNC_PWM_BREAK

WM_IO_MUX_GPIO24_FUNC_SDIO_D0

WM_IO_MUX_GPIO24_FUNC_GPIO

WM_IO_MUX_GPIO24_FUNC_LCD_SEG20

WM_IO_MUX_GPIO24_FUNC_TOUCH11

GPIO25

WM_IO_MUX_GPIO25_FUNC_I2S_LRCK

WM_IO_MUX_GPIO25_FUNC_MMC_D1

WM_IO_MUX_GPIO25_FUNC_HSPI_CS

WM_IO_MUX_GPIO25_FUNC_SDIO_D1

WM_IO_MUX_GPIO25_FUNC_GPIO

WM_IO_MUX_GPIO25_FUNC_LCD_SEG21

WM_IO_MUX_GPIO25_FUNC_TOUCH12

GPIO26

WM_IO_MUX_GPIO26_FUNC_I2S_DI

WM_IO_MUX_GPIO26_FUNC_MMC_D2

WM_IO_MUX_GPIO26_FUNC_HSPI_DI

WM_IO_MUX_GPIO26_FUNC_SDIO_D2

WM_IO_MUX_GPIO26_FUNC_GPIO

WM_IO_MUX_GPIO26_FUNC_LCD_SEG22

GPIO27

WM_IO_MUX_GPIO27_FUNC_I2S_DO

WM_IO_MUX_GPIO27_FUNC_MMC_D3

WM_IO_MUX_GPIO27_FUNC_HSPI_DO

WM_IO_MUX_GPIO27_FUNC_SDIO_D3

WM_IO_MUX_GPIO27_FUNC_GPIO

WM_IO_MUX_GPIO27_FUNC_LCD_SEG23

GPIO28

WM_IO_MUX_GPIO28_FUNC_HSPI_CK

WM_IO_MUX_GPIO28_FUNC_PWM0

WM_IO_MUX_GPIO28_FUNC_UART5_CTS

WM_IO_MUX_GPIO28_FUNC_I2S_BCLK

WM_IO_MUX_GPIO28_FUNC_GPIO

WM_IO_MUX_GPIO28_FUNC_LCD_SEG24

GPIO29

WM_IO_MUX_GPIO29_FUNC_HSPI_INT

WM_IO_MUX_GPIO29_FUNC_PWM1

WM_IO_MUX_GPIO29_FUNC_UART5_RTS

WM_IO_MUX_GPIO29_FUNC_I2S_LRCLK

WM_IO_MUX_GPIO29_FUNC_GPIO

WM_IO_MUX_GPIO29_FUNC_LCD_SEG25

GPIO30

WM_IO_MUX_GPIO30_FUNC_HSPI_CS

WM_IO_MUX_GPIO30_FUNC_PWM2

WM_IO_MUX_GPIO30_FUNC_LSPI_CS

WM_IO_MUX_GPIO30_FUNC_I2S_DO

WM_IO_MUX_GPIO30_FUNC_GPIO

WM_IO_MUX_GPIO30_FUNC_LCD_SEG26

GPIO31

WM_IO_MUX_GPIO31_FUNC_HSPI_DI

WM_IO_MUX_GPIO31_FUNC_PWM3

WM_IO_MUX_GPIO31_FUNC_LSPI_CK

WM_IO_MUX_GPIO31_FUNC_I2S_DI

WM_IO_MUX_GPIO31_FUNC_GPIO

WM_IO_MUX_GPIO31_FUNC_LCD_SEG27

GPIO32

WM_IO_MUX_GPIO32_FUNC_HSPI_DO

WM_IO_MUX_GPIO32_FUNC_PWM4

WM_IO_MUX_GPIO32_FUNC_LSPI_MISO

WM_IO_MUX_GPIO32_FUNC_UART1_RX

WM_IO_MUX_GPIO32_FUNC_LCD_SEG28

GPIO33

WM_IO_MUX_GPIO33_FUNC_UART5_RX

WM_IO_MUX_GPIO33_FUNC_PWM_BREAK

WM_IO_MUX_GPIO33_FUNC_LSPI_MOSI

WM_IO_MUX_GPIO33_FUNC_I2S_MCLK

WM_IO_MUX_GPIO33_FUNC_GPIO

WM_IO_MUX_GPIO33_FUNC_LCD_SEG29

GPIO34

WM_IO_MUX_GPIO34_FUNC_UART5_TX

WM_IO_MUX_GPIO34_FUNC_GPIO

WM_IO_MUX_GPIO34_FUNC_LCD_SEG29

GPIO35

WM_IO_MUX_GPIO35_FUNC_UART0_TX

WM_IO_MUX_GPIO35_FUNC_PWM0

WM_IO_MUX_GPIO35_FUNC_UART1_RTS

WM_IO_MUX_GPIO35_FUNC_I2C_SDA

WM_IO_MUX_GPIO35_FUNC_GPIO

GPIO36

WM_IO_MUX_GPIO36_FUNC_UART0_RX

WM_IO_MUX_GPIO36_FUNC_PWM1

WM_IO_MUX_GPIO36_FUNC_UART1_CTS

WM_IO_MUX_GPIO36_FUNC_I2C_SCL

WM_IO_MUX_GPIO36_FUNC_GPIO

GPIO37

WM_IO_MUX_GPIO37_FUNC_UART0_RTS

WM_IO_MUX_GPIO37_FUNC_PCM_SYNC

WM_IO_MUX_GPIO37_FUNC_GPIO

WM_IO_MUX_GPIO33_FUNC_LCD_COM1

GPIO38

WM_IO_MUX_GPIO38_FUNC_UART0_CTS

WM_IO_MUX_GPIO38_FUNC_PCM_CK

WM_IO_MUX_GPIO38_FUNC_GPIO

WM_IO_MUX_GPIO38_FUNC_LCD_COM2

GPIO39

GPIO40

WM_IO_MUX_GPIO40_FUNC_LSPI_CK

WM_IO_MUX_GPIO40_FUNC_PWM2

WM_IO_MUX_GPIO40_FUNC_GPIO

WM_IO_MUX_GPIO40_FUNC_LCD_SEG2

GPIO41

WM_IO_MUX_GPIO41_FUNC_LSPI_MISO

WM_IO_MUX_GPIO41_FUNC_PWM3

WM_IO_MUX_GPIO41_FUNC_GPIO

WM_IO_MUX_GPIO41_FUNC_LCD_COM0

GPIO42

WM_IO_MUX_GPIO42_FUNC_LSPI_MOSI

WM_IO_MUX_GPIO42_FUNC_PWM4

WM_IO_MUX_GPIO42_FUNC_GPIO

WM_IO_MUX_GPIO42_FUNC_LCD_SEG1

GPIO43

WM_IO_MUX_GPIO43_FUNC_PSRAM_CS

WM_IO_MUX_GPIO43_FUNC_UART0_TX

WM_IO_MUX_GPIO43_FUNC_GPIO

WM_IO_MUX_GPIO43_FUNC_LCD_COM3

GPIO44

GPIO45

GPIO46

GPIO47

主要功能

初始化GPIO

使用GPIO前需要调用 wm_drv_gpio_init 函数用于初始化GPIO设备。利用 wm_device_t,示例代码如下:

wm_device_t *gpio_device;
gpio_device = wm_drv_gpio_init("gpio");

其参数指定设备名称,名称在设备表中定义,和设备表中的名称要保持一致。

警告

GPIO初始化后,如果没有调用 wm_drv_gpio_deinit , 再次调用 wm_drv_gpio_init 会返回 NULL

配置方向

GPIO方向配置用于设置引脚为输入或输出模式。使用 wm_drv_gpio_set_dir 函数来设置引脚方向,示例代码如下:

wm_drv_gpio_set_dir(WM_GPIO_NUM_0, WM_GPIO_DIR_INPUT);
wm_drv_gpio_set_dir(WM_GPIO_NUM_0, WM_GPIO_DIR_OUTPUT);

第一个参数是引脚编号,第二个参数是方向,方向可以是 WM_GPIO_DIR_INPUTWM_GPIO_DIR_OUTPUT

配置pullmode

GPIO拉模式配置用于设置引脚为上拉、下拉或浮空模式。使用 wm_drv_gpio_set_pullmode 函数来配置引脚拉模式,示例代码如下:

wm_drv_gpio_set_pullmode(WM_GPIO_NUM_0, WM_GPIO_PULL_UP);
wm_drv_gpio_set_pullmode(WM_GPIO_NUM_0, WM_GPIO_PULL_DOWN);

第一个参数是引脚编号,第二个参数是PULLMODE,PULLMODE可以是 WM_GPIO_PULL_UPWM_GPIO_PULL_DOWNWM_GPIO_FLOAT

读取数据

使用 wm_drv_gpio_data_get 函数从GPIO引脚读取数据。此函数返回引脚的当前电平,示例代码如下:

int value = wm_drv_gpio_data_get(WM_GPIO_NUM_0);

其参数为引脚编号。

写入数据

使用 wm_drv_gpio_data_set 函数将数据写入GPIO引脚。此函数将引脚设置为高电平,示例代码如下:

wm_drv_gpio_data_set(WM_GPIO_NUM_0);

使用 wm_drv_gpio_data_reset 函数将引脚设置为低电平,示例代码如下:

wm_drv_gpio_data_reset(WM_GPIO_NUM_0);

其参数为引脚编号。

选择引脚复用

使用 wm_drv_gpio_iomux_func_sel 函数选择GPIO引脚的复用功能,示例代码如下:

wm_gpio_num_t pin = WM_GPIO_NUM_21;
wm_gpio_pin_mux_t func = WM_GPIO_IOMUX_FUN5;

wm_drv_gpio_iomux_func_sel(pin, func);

第一个参数是引脚编号,第二个参数是功能模式,可以参考功能概述中表格或者在 wm_io_mux.h 查询。

使能中断

使用 wm_drv_gpio_enable_isr 函数使能GPIO引脚的中断,示例代码如下:

wm_drv_gpio_enable_isr(WM_GPIO_NUM_21);

其参数为引脚编号。

禁用中断

使用 wm_drv_gpio_disable_isr 函数禁用GPIO引脚的中断,示例代码如下:

wm_drv_gpio_disable_isr(WM_GPIO_NUM_21);

其参数为引脚编号。

设置中断模式

使用 wm_drv_gpio_set_intr_mode 函数配置GPIO引脚的中断触发方式,包括下降沿触发、上升沿触发、双边沿触发、低电平触发和高电平触发。示例代码如下:

wm_drv_gpio_set_intr_mode(WM_GPIO_NUM_21, WM_GPIO_IRQ_TRIG_HIGH_LEVEL);

第一个参数是引脚编号,第二个参数是中断模式,中断模式可以是 WM_GPIO_IRQ_TRIG_FALLING_EDGEWM_GPIO_IRQ_TRIG_RISING_EDGEWM_GPIO_IRQ_TRIG_DOUBLE_EDGEWM_GPIO_IRQ_TRIG_LOW_LEVELWM_GPIO_IRQ_TRIG_HIGH_LEVEL

应用实例

使用GPIO基本示例请参照: examples/peripheral/gpio

API参考

查找GPIO相关API请参考:

GPIO API 参考