『nodeMCU』GPIO接口学习

  1. PIN 相关宏定义
  2. gpio_out_set
  3. GPIO 输入输出相关宏
  4. GPIO 中断
  5. gpio_pin_intr_state_set
  6. GPIO中断处理函数

1. PIN 相关宏定义

以下宏定义控制GPIO管脚的状态

函数 功能
PIN_PULLUP_DIS ( PIN_NAME ) 管脚上拉屏蔽
PIN_PULLUP_EN ( PIN_NAME ) 管脚上拉使能
PIN_FUNC_SELECT ( PIN_NAME, FUNC ) 管脚功能选择

示例:

//Use MTDI pin as GPIO12.
PIN_FUNC_SELECT ( PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12 );

2. gpio_out_set

功能:
设置 GPIO 属性
函数定义:

void gpio_output_set (
    uint32 set_mask,
    uint32 clear_mask,
    uint32 enable_mask,
    uint32 disable_mask
)

参数:

    uint32 set_mask //设置输出为高的位。对应位为1,输出高;对应位为0,不改变状态
    uint32 clear_mask //设置输出为低的位。对应位为1,输出低;对应位为0,不改变状态
    uint32 enable_mask //设置使能输出的位
    uint32 disable_mask //设置使能输入的位

返回:

示例:

gpio_out_set ( BIT12, 0, BIT12, 0 )
//设置 GPIO12 输出高电平
gpio_out_set ( 0, BIT12, BIT12, 0 )
//设置 GPIO12输出低电平
gpio_out_set ( BIT12, BIT13, BIT12|BIT13, 0 )
//设置 GPIO12 输出高电平,GPIO13 输出低电平
gpio_output_set ( 0, 0, 0, BIT12 )
//设置 GPIO12 为输入

3. GPIO 输入输出相关宏

GPIO_OUTPUT_SET ( gpio_no, bit_value )
//设置 gpio_no 管脚输出 bit_value,与上一节的输出高低电平的示例相同。
GPIO_DIS_OUTPUT ( gpio_no )
//设置 gpio_no 管脚输入,与上一节的设置输入示例相同。
GPIO_INPUT_GET ( gpio_no )
//获取 gpio_no 管脚的电平状态。

4. GPIO 中断

ETS_GPIO_INTR_ATTACH ( func, arg )
//注册 GPIO 中断处理函数
ETS_GPIO_INTR_DISABLE ( )
//关 GPIO 中断
ETS_GPIO_INTR_ENABLE ( )
//开 GPIO 中断

5. gpio_pin_intr_state_set

功能:
设置 GPIO 中断触发状态
函数定义:

void gpio_pin_intr_state_set (
    uint32 i,
    GPIO_INT_TYPE intr_stata
)

参数:

uint32 i
//GPIO pin ID,例如设置 GPIO14,则为 GPIO_ID_PIN ( 14 )
GPIO_INT_TYPE intr_stata
//中断触发状态
typedef enum {
    GPIO_PIN_INTR_DISABLE = 0,
    GPIO_PIN_INTR_POSEDGE = 1,
    GPIO_PIN_INTR_NEGEDGE = 2,
    GPIO_PIN_INTR_ANYEDGE = 3,
    GPIO_PIN_INTR_LOLEVEL = 4,
    GPIO_PIN_INTR_HILEVEL = 5
} GPIO_INT_TYPE;

返回:

6. GPIO中断处理函数

在 GPIO 中断处理函数内,需要做如下操作来清除响应位的中断状态:

    uint32 gpio_status;
    gpio_status = GPIO_REG_READ ( GPIO_STATUS_ADDRESS );
    //clear interrupt status
    GPIO_REG_WRITE ( GPIO_STATUS_W1TC_ADDRESS, gpio_status );

你可能感兴趣的:(『nodeMCU』GPIO接口学习)