GPIO
简介
GPIO (General-porpose input/output)是指通用输入输出端口的简称。可以通过软件控制其输出和输入。对于输入,可以通过pullmode来配置默认电压,对于输出,可以通过写寄存器让这个引脚输出高电位或者低电位。
功能列表
功能概述
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_INPUT
或WM_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_UP
、WM_GPIO_PULL_DOWN
或WM_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_EDGE
、WM_GPIO_IRQ_TRIG_RISING_EDGE
、WM_GPIO_IRQ_TRIG_DOUBLE_EDGE
、WM_GPIO_IRQ_TRIG_LOW_LEVEL
或WM_GPIO_IRQ_TRIG_HIGH_LEVEL
。
应用实例
使用GPIO基本示例请参照: examples/peripheral/gpio
API参考
查找GPIO相关API请参考: