ESP8266学习——GPIO Input

原理图

在这里插入图片描述
在这里插入图片描述

  • 当按键按下时,GPIO0检测到低电平

将GPIO4设置为IO口

	// 管脚功能选择(注意:参数1【PIN_NAME】管脚名、参数2【FUNC】管脚功能)
	//【FUNC】:为功能号-1
	//--------------------------------------------------------------------------
	//初始化按键(BOOT == GPIO0)
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);
	// GPIO0设为IO口
	

解释:

将参数【PIN_NAME】对应的管脚,设为【FUNC】对应的功能在这里插入图片描述
在这里插入图片描述

#define PERIPHS_IO_MUX_GPIO0_U          (PERIPHS_IO_MUX + 0x34)
#define FUNC_GPIO0                      0

#define PIN_FUNC_SELECT(PIN_NAME, FUNC)  do { \
    WRITE_PERI_REG(PIN_NAME,   \
                                (READ_PERI_REG(PIN_NAME) \
                                     &  (~(PERIPHS_IO_MUX_FUNC<<PERIPHS_IO_MUX_FUNC_S)))  \
                                     |( (((FUNC&BIT2)<<2)|(FUNC&0x3))<<PERIPHS_IO_MUX_FUNC_S) );  \
    } while (0)

将GPIO0设置为失能输出

	GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));			//GPIO_0失能输出(默认)

解释:

将【gpio_no】设为失能输出
在这里插入图片描述
在这里插入图片描述

#define GPIO_ID_PIN(n)                                   (GPIO_ID_PIN0+(n))

#define GPIO_DIS_OUTPUT(gpio_no) 	gpio_output_set(0,0,0, 1<<gpio_no)

设置内部上拉功能

	PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U);		//GPIO_0失能内部上拉(默认)
	//PIN_PULLUP_EN(PERIPHS_IO_MUX_GPUO0_U);	//GPIO_0使能内部上拉

GPIO0外接上拉功能,所以要关闭它的内部上拉功能

读取GPIO0的管脚电平状态

	//读取GPIO0的管脚电平状态
	GPIO_INPUT_GET(GPIO_ID_PIN(0))

解释:

读取【gpio_no】的管脚电平状态
在这里插入图片描述

#define GPIO_INPUT_GET(gpio_no)     ((gpio_input_get()>>gpio_no)&BIT0) ```

user_init 代码

#include "ets_sys.h"

#include "osapi.h"
#include "user_interface.h"

#include "driver/uart.h"

void ICACHE_FLASH_ATTR
user_init(void)
{
	uart_init(9600, 9600);		//初始化波特率
	os_printf("\r\n----------------------------------\r\n");
	os_printf("SDK version: %s\n", system_get_sdk_version());	//串口打印SDK版本
	uart0_sendStr("\r\n---Hello World! Hello wtz!---\r\n");
	os_printf("\r\n----------------------------------\r\n");

	//初始化LED
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);

	//初始化按键(BOOT == GPIO0)
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);
	GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));			//GPIO_0失能输出(默认)
	PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U);		//GPIO_0失能内部上拉(默认)
	//PIN_PULLUP_EN(PERIPHS_IO_MUX_GPUO0_U);	//GPIO_0使能内部上拉

	while(1)
	{
		system_soft_wdt_feed();		//喂狗,防止复位

		if (GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 0)	//读取GPIO_0电平
			GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);		//LED亮
		else
			GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);		//LED灭
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值