微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > ESP8266 GPIO入门篇

ESP8266 GPIO入门篇

时间:10-02 整理:3721RD 点击:

ESP8266 GPIO入门篇



了解一款MCU无法是从了解时钟配置以及GPIO开始,对于8266的GPIO,我们可以从官方的SDK文档中查到
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_output_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 : 设置使能输⼊入的位
返回:
⽆无
Espressif Systems
ESP8266 SDK 编程⼿手册
⽰示例:
gpio_output_set(BIT12, 0, BIT12, 0):
设置 GPIO12 输出⾼高电平;
gpio_output_set(0, BIT12, BIT12, 0):
设置 GPIO12 输出低电平;
gpio_output_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_state
)

Espressif Systems
ESP8266 SDK 编程⼿手册
参数:
uint32 i : GPIO pin ID,例如设置 GPIO14,则为 GPIO_ID_PIN(14);
GPIO_INT_TYPE intr_state : 中断触发状态:
typedef enum {
GPIO_PIN_INTR_DISABLE = 0,
GPIO_PIN_INTR_POSEDGE = 1,
GPIO_PIN_INTR_NEGEDGE = 2,
GPIO_PIN_INTR_ANYEGDE = 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);

从上面资料我们可以知道,对于8266的GPIO操作也是需要首先配置引脚为GPIO功能,比如配置GPIO12


只需要配置以下几步

// Use MTDI pin as GPIO12.

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);


输出高电平

GPIO_OUTPUT_SET(FUNC_GPIO12, 1);


配置输入

GPIO_DIS_OUTPUT(FUNC_GPIO12);


获得GPIO电平

uin16 status=GPIO_INPUT_GET(FUNC_GPIO12);


配置GPIO中断处理函数:

ETS_GPIO_INTR_ATTACH(func, arg)


使用方法:先定义一个GPIO中断处理函数,arg如果没有参数直接输入NULL

void GPIO_INTER(void)

{

uint32 gpio_status;

gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);

//clear interrupt status

GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);


}


ETS_GPIO_INTR_ATTACH(GPIO_INTER, NULL);


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top