注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

ESP8266 GPIO入门(转)  

2016-03-22 01:00:27|  分类: 硬件 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
想用ESP8266作一个wifi的游戏手柄,但发现买的ESP8266模块GPIO引脚数量有限。所以就想看能不能自已把SPI功能关了,使用引脚的GPIO功能。这样就可以多出来三个引脚。找到了下边的资源拿来分享。使用的开发板是wemos d1的arduino开发板,此开发板只有一个Esp8266模块,但是可以使用arduino开发环境来作开发。
了解一款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
ESP8266 GPIO入门(转) - ♂苹果 - 眼睛想旅行
 

只需要配置以下几步
// 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);
  评论这张
 
阅读(356)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017