GPIO输入控制
GPIO输入寄存器
GPIO输入寄存器GPIO_IN
BIT[15:0]输入状态位(可读可写):若对应的位为1,表示该IO的引脚状态为高电平;若对应的位为低电平,表示该IO的引脚状态为低电平。BIT[15:0]对应16个GPIO的输入状态位。
输入相关宏定义
GPIO_OUTPUT_SET(gpio_no, bit_value)
宏名称:GPIO_OUTPUT_SET(gpio_no, bit_value)
宏功能:设置指定引脚(gpio_no)为指定电平(bit_value)
形参:
gpio_no:指定的GPIO口
可写参数:GPIO_ID_PIN(n)//n的取值范围为[15:0],对应的是GPIO[15:0]
bit_value:指定电平
可填参数:1 -- 高电平 0 -- 低电平
示例:GPIO_OUTPUT_SET(GPIO_ID_PIN(0),1);//设置GPIO0引脚为高电平
GPIO_DIS_OUTPUT(gpio_no)
宏名称:GPIO_DIS_OUTPUT(gpio_no)
宏功能:设置指定引脚(gpio_no)为输入模式
形参:
gpio_no:指定的GPIO口
可写参数:GPIO_ID_PIN(n)//n的取值范围为[15:0],对应的是GPIO[15:0]
示例:GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));//设置GPIO0为输入模式
GPIO_INPUT_GET(gpio_no)
宏名称:GPIO_INPUT_GET(gpio_no)
宏功能:获取指定引脚(gpio_no)的电平状态
形参:
gpio_no:指定的GPIO口
可写参数:GPIO_ID_PIN(n)//n的取值范围为[15:0],对应的是GPIO[15:0]
示例:GPIO_INPUT_GET(GPIO_ID_PIN(0));//获取GPIO0的当前状态
ESP8266输入控制举例
硬件连接图
由原理图可知:按键BOOT接到ESP8266模块的GPIO0引脚。由于GPIO0通过R3进行电源上拉,所以GPIO0默认为高电平状态。当使能按键引脚之后,按下按键为低电平。
按键初始化代码
这里的按键初始化代码使用多文件编程。
1 新建驱动文件key.c和key.h
我们为了不去修改工程里面的makefile文件,所以我们直接将key.c放置在app文件夹下的driver文件里面
2 添加头文件
3 配置IO口模式
4 源代码
//key.c源代码
#include "driver/key.h"
void KeyInitConfig(void)
{
//1.设置按键所对应的GPIO0口为IO口模式 -- 详见文档3.3.1.1章节
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); // GPIO0设为IO口
//2.由于GPIO0通过R3进行电源上拉,所以GPIO0默认为高电平状态,在这里要将内部拉高取消
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U);
//3.设定GPIO0引脚为输入模式
GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));
}
//usrt_mian.c源代码
void ICACHE_FLASH_ATTR user_init(void)
{
system_soft_wdt_feed();//喂软件看门狗,防止程序跑偏
uart_init(9600, 9600);//设置串口波特率
LedInitConfig();
KeyInitConfig();
os_printf("=============================================\r\n");
os_printf("\t SDK version:\t%s", system_get_sdk_version());
os_printf("\r\n嵌入式陈工个人编辑资料\r\n未经本人同意请勿私自传播\r\n");
os_printf("\r\n按键控制测试代码\r\n");
os_printf("\r\n带看门狗\r\n");
os_printf("=============================================\r\n");
while (1)
{
if ((GPIO_INPUT_GET(GPIO_ID_PIN(0))) == 0)//检测按键是否按下
GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);//点亮LED
else
GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);//点亮LED
}
}
源代码参考:链接:https://pan.baidu.com/s/1MZ-8qA3QICZSQ2ttmGc2Tw 密码:r1m2