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);
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: ESP8266是一款低成本、低功耗的Wi-Fi模块,具有丰富的GPIO(通用输入输出)功能。在配置ESP8266GPIO时,可以参考ESP8266_Pin_List_xxxxxx.xlsx表格,其中的Digital Die Pin List页提供了通用的GPIO和复用功能的信息。在Reg页可以查阅到GPIO功能选择相关的寄存器。\[1\] ESP8266GPIO引脚有多个功能,如GPIO0、GPIO2、GPIO4等,每个引脚都有对应的编号和复用功能。例如,GPIO0的引脚编号为15,复用功能为UGPIO1。类似地,GPIO2的引脚编号为14,复用功能为UGPIO3。\[2\] 在处理ESP8266GPIO中断函数时,可以参考以下示例代码。首先,通过读取GPIO_STATUS_ADDRESS寄存器来获取中断状态,然后根据中断状态进行相应的处理。在处理过程中,可以使用GPIO_REG_WRITE函数来清除中断掩码,以确保中断被正确处理。\[3\] 总之,配置ESP8266GPIO时,可以参考ESP8266_Pin_List_xxxxxx.xlsx表格中的信息,并根据需要使用相应的引脚和功能。同时,处理GPIO中断时,可以参考示例代码来实现相应的功能。 #### 引用[.reference_title] - *1* *2* *3* [ESP8266 GPIO 使用说明](https://blog.csdn.net/springcity2014/article/details/82985377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值