原理图
- 当按键按下时,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灭
}
}