管脚列表说明

ESP8266EX技术规格书:附录 - 管脚列表

文件名称:0a-esp8266ex_datasheet_cn.pdf

附录 - 管脚列表  
附录 - ESP8266 管脚清单《ESP8266_Pin_List.xls》提供管脚的详细信息,如下所示。
	• Digital Die Pin List
	• Buffer Sheet
	• Register List
	• Strapping List
📖 说明:
	• INST_NAME 指的是在 eagle_soc.h 定义下的 IO_MUX REGISTER,例例如 MTDI_U 指的是
	PERIPHS_IO_MUX_MTDI_U。
	• Net Name 指的是原理图中的管脚名称。
	• 功能指的是每个管脚的多功能。
	• 功能 1 ~ 5 对应 SDK 中的功能 0 ~ 4。例例如,将 MTDI 设置为 GPIO12,如下所示:
	#define FUNC_GPIO12 3 //defined in eagle_soc.h
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12)

在CPU(ESP8266EX),模组(ESP-12F),开发板(NodeMCU)各个管脚描述都不相同,上面的文档是针对CPU来说的,那怎么对应呢?

用模组的LED灯

1. 在ESP-12F规格表中

找到"五、 原理图"
VDD3V3----LED1-----R1(470)----GPIO2
这里用的GPIO02,当GPIO2输出高电平时,LED无电压差,是灭的。

找到“四、 管脚定义”

脚序名称功能说明
11IO2GPIO2/UART1_TXD

表格中IO2是GPIO2,被省略了GP。

在引脚图中描述的是GPIO2。

2.CPU规格表引脚定义,和模块的功能描述是相同的。

管脚名称类型功能
14GPIO2I/O可⽤用作烧写 Flash 时 UART1_TX;GPIO2

说明:GPIO2、GPIO0 和 MTDO ⽤用于选择启动模式和 SDIO 模式;

在引脚图中描述的也是GPIO2。

3. 引脚名称分析

在《ESP8266_Pin_List.xls》文件中
参考Notes:“PAD NAME accords with the pin name in schematic”,含义 :指的是原理图中的管脚名称。上面的错误描述为“Net Name”了。
在“Digital Die Pin List”工作表中根据PAD NAME字段找到GPIO2。

PAD NameInst NamePull up/ Pull down typeFunction1TypeFunction2TypeFunction3TypeFunction4TypeFunction5TypeAt ResetAfter ResetSleep
GPIO2GPIO2_UPull upGPIO2I/O/TI2SO_WSI/O/TU1TXDOI/O/TU0TXDOoe=0, wpuwpuoe=0

这里的对应关系是我自己分析的,望指正。

Inst Name是GPIO2_U,也就是说需要加上前缀IO_MUX,还要在最前面加上PERIPHS_,才是在 SDK的eagle_soc.h 中定义的名称:PERIPHS_IO_MUX_GPIO2_U

在sdk里面找到eagle_soc.h

#define PERIPHS_IO_MUX 0x60000800

#define PERIPHS_IO_MUX_GPIO2_U (PERIPHS_IO_MUX + 0x38)

在reg这个工作表可以看到GPIO2的地址是0x60000838,和上面宏定义是一样的,这个地址是代表对应寄存器地址。

如果要使用Function2这个功能,则加上FUNC_,对应eagle_soc.h中定义

#define FUNC_GPIO2 0

编写测试代码

根据sdk api参考,7.1. GPIO 接⼝

在user_main.c的user_init(void)函数中添加

PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U);   //管脚上拉使能,选取对应引脚设置为上拉
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);  //管脚功能选择,选取对应引脚设置为GPIO功能
GPIO_OUTPUT_SET(PERIPHS_IO_MUX_GPIO2_U, 0);  //api参考说“GPIO_OUTPUT_SET(gpio_no, bit_value) 设置 gpio_no 管脚输出 bit_value,与上⼀一节的输出⾼高低电平的示例例相同。”,而gpio.h中是一个宏,很复杂的调用了gpio_output_set函数;gpio_no也并无说明,搜索不到。
// 假设bit_value为1表示高电平吧。我们要点亮这个灯,则输出低电平,设置为0
//注释一下其他测试代码
 //user_webserver_init(SERVER_PORT);

编译报错 warning: left shift count >= width of type

根据提示,只烧写2个文件

No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin.
eagle.flash.bin-------->0x00000
eagle.irom0text.bin---->0x10000

重启设备,报错,反复重启
修改为:

    PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U);
    PIN_FUNC_SELECT(GPIO_ID_PIN(2),FUNC_GPIO2);
    GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);

还是反复重启

Fatal exception 28(LoadProhibitedCause):
epc1=0x40226897, epc2=0x00000000, epc3=0x401004e5, excvaddr=0x00000002, depc=0x00000000

参考api修改,最终代码如下,灯常亮。

   os_printf("-----------------\n");
   os_printf("\nbegin turn on led...\n");
   //PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U);   //管脚上拉使能,选取对应引脚设置为上拉
   PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);  //管脚功能选择,选取对应引脚设置为GPIO功能
   gpio_output_set(0, BIT2, BIT2, 0);  //设置 GPIO12 输出低电平;
   os_printf("\nEnd of LED!\n");
   os_printf("-----------------\n");

小结:

  1. 不能设置上拉,需要删除PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U);

  2. 设置低电平

GPIO_OUTPUT_SET(PERIPHS_IO_MUX_GPIO2_U, 0);  //这种格式是错误的,编译报错:warning: left shift count >= width of type
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);   //串口打印正常,灯灭,应该是高电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);   //串口打印正常,灯常亮,应该是低电平
GPIO_OUTPUT_SET(BIT2, 1);   //串口打印正常,取值0和1都是灭的
  1. 这个NodeMCU看来更适合刷固件,用AT指令或者lua语言,可惜都不会。这个资料文档东一个西一个的,看不懂,要命了,入不了门,不折腾了,换STM32去 。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐