GPIO
简介
GPIO (General-porpose input/output)是通用输入输出端口的简称。可以通过软件控制其输出和输入。对于输入,可以通过pullmode来配置默认电压,对于输出,可以通过写寄存器让这个引脚输出高电位或者低电位。
功能列表
功能概述
W800具有48个GPIO引脚,通过IO MUX可配置复用关系,具体关系请参考PINMUX章节,其中OPT1-OPT4为数字复用,OPT5为GPIO,OPT6-OPT7为模拟复用,需注意:当作为模拟复用的时候,该引脚需要被配置为输入悬空。
主要功能
初始化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请参考: