1、今天周日
单休,现在是下午17:06,外面下雨,广州也冷了。
如标题,这一篇文章主要是记录,让ESP8266的GPIO输出高低电平。
2、两步
2.1、配置IO口为GPIO功能
相应的头文件在"eagle_soc.h"中
2.1.1、选择IO口功能的宏
以配置GPIO4为例,使用的宏为“PIN_FUNC_SELECT”,后面有两个参数,第一个是引脚的名称,第二个是引脚的功能。
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);
2.1.2、宏中的参数
头文件中有这两个参数的名称,复制就可以了,不过头文件的GPIO顺序有点乱,我照着GPIO0~GPIO15给排了一下顺序。
#define PERIPHS_IO_MUX_GPIO0_U (PERIPHS_IO_MUX + 0x34) //GPIO0
#define FUNC_GPIO0 0
#define PERIPHS_IO_MUX_U0TXD_U (PERIPHS_IO_MUX + 0x18) //GPIO1
#define FUNC_U0TXD 0
#define FUNC_GPIO1 3
#define PERIPHS_IO_MUX_GPIO2_U (PERIPHS_IO_MUX + 0x38) //GPIO2
#define FUNC_GPIO2 0
#define FUNC_U1TXD_BK 2
#define FUNC_U0TXD_BK 4
#define PERIPHS_IO_MUX_U0RXD_U (PERIPHS_IO_MUX + 0x14) //GPIO3
#define FUNC_GPIO3 3
#define PERIPHS_IO_MUX_GPIO4_U (PERIPHS_IO_MUX + 0x3C) //GPIO4
#define FUNC_GPIO4 0
#define PERIPHS_IO_MUX_GPIO5_U (PERIPHS_IO_MUX + 0x40) //GPIO5
#define FUNC_GPIO5 0
#define PERIPHS_IO_MUX_SD_CLK_U (PERIPHS_IO_MUX + 0x1c) //GPIO6
#define FUNC_SDCLK 0
#define FUNC_SPICLK 1
#define PERIPHS_IO_MUX_SD_DATA0_U (PERIPHS_IO_MUX + 0x20) //GPIO7
#define FUNC_SDDATA0 0
#define FUNC_SPIQ 1
#define FUNC_U1TXD 4
#define PERIPHS_IO_MUX_SD_DATA1_U (PERIPHS_IO_MUX + 0x24) //GPIO8
#define FUNC_SDDATA1 0
#define FUNC_SPID 1
#define FUNC_U1RXD 4
#define FUNC_SDDATA1_U1RXD 7
#define PERIPHS_IO_MUX_SD_DATA2_U (PERIPHS_IO_MUX + 0x28) //GPIO9
#define FUNC_SDDATA2 0
#define FUNC_SPIHD 1
#define FUNC_GPIO9 3
#define PERIPHS_IO_MUX_SD_DATA3_U (PERIPHS_IO_MUX + 0x2c) //GPIO10
#define FUNC_SDDATA3 0
#define FUNC_SPIWP 1
#define FUNC_GPIO10 3
#define PERIPHS_IO_MUX_SD_CMD_U (PERIPHS_IO_MUX + 0x30) //GPIO11
#define FUNC_SDCMD 0
#define FUNC_SPICS0 1
#define PERIPHS_IO_MUX_MTDI_U (PERIPHS_IO_MUX + 0x04) //GPIO12
#define FUNC_GPIO12 3
#define PERIPHS_IO_MUX_MTCK_U (PERIPHS_IO_MUX + 0x08) //GPIO13
#define FUNC_GPIO13 3
#define PERIPHS_IO_MUX_MTMS_U (PERIPHS_IO_MUX + 0x0C) //GPIO14
#define FUNC_GPIO14 3
#define PERIPHS_IO_MUX_MTDO_U (PERIPHS_IO_MUX + 0x10) //GPIO15
#define FUNC_GPIO15 3
#define FUNC_U0RTS 4
2.1.3、两个参数参考表格
这个表格在官网可以下载,我把其中的某些单元格隐藏了,看起来比较清楚一点。
Inst Name 就是第一个参数"PERIPHS_IO_MUX_xxx"中的"xxx",代表引脚的名称。
后面的Function1~5就是对应的功能选择(从1开始计数),如果Function1在参数中要写"0"(这时是从0开始计数)。
比如我们要配置IO4为GPIO的功能。
找到IO4在倒数第二行,叫"GPIO4_U",所以第一个参数写"PERIPHS_IO_MUX_GPIO4_U";
GPIO功能在Function1,所以第二个参数是"0".
2.2、输出高低电平函数
配置完为GPIO功能之后,就可以使用输出IO口状态的宏了,如下。
这个宏的使用很简单,第一个参数是引脚的序号;第二个参数是你想要的高低电平。
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1); //输出高电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0); //输出低电平
"GPIO_ID_PIN(4)"就是4,只不过是封装了一下,看起来含义更明确。
#define GPIO_ID_PIN0 0
#define GPIO_ID_PIN(n) (GPIO_ID_PIN0+(n))