熟悉8266的读者应该都知道8266有两个串口,芯片在上电的过程中,同时会在串口0和串口1输出一些信息,这些信息似乎是固化在芯片里面了一样,无论在程序中如何设置都无法屏蔽。

ESP8266 NONOS SDK esp8266 nonos sdk怎么屏蔽pm2打印_8266屏蔽启动信息

                                  ↑ 无法屏蔽的上电信息

 

如果系统中要使用8266串口与MCU进行通信,那么这些无法屏蔽的串口信息可能会对MCU产生干扰,从而影响系统的稳定性。本文将介绍一种方法,规避8266的上电信息干扰。

 

核心方法如下:


8266上电过程中会在IO1(U0TX)和IO2(U1TX)引脚输出一些上电信息,芯片启动后,串口将被应用程序接管,之后串口要输出什么内容将完全由应用程序控制。我们的目标是规避芯片上电后到应用程序接管系统前这段时间内串口输出的不受控制的信息。8266提供了一个串口引脚映射机制,可以在应用程序接管系统后,将串口1的TX和RX映射到IO13及IO15引脚。这样一来如果我们使用8266的IO13和IO15作为串口收发引脚与MCU通信,就可以规避上电信息对MCU的干扰了。具体的启动过程如下,上电后到应用程序接管系统前,启动信息通过串口默认引脚输出,IO13及IO15无任何信息输出,应用程序接管系统后,将串口0映射到IO13及IO15,之后系统采用IO13和IO15与MCU通信。

ESP8266 NONOS SDK esp8266 nonos sdk怎么屏蔽pm2打印_8266_02

                                                                                   修改后系统运行时序图

 

如何实现


在8266 RTOS 3.X SDK中可用过如下操作实现上述功能:

  1. 在项目目录下执行make menuconfig,打开配置选项
  2. 依次进入> Component config > ESP8266-specific
  3. 将UART peripheral to use for console output (0-1)选项设为UART1
  4. 同时勾选Swap UART0 I/O pins 选项
  5. 保存后退出

经过如上配置后,调试信息将会通过串口1(IO2)输出,同时串口0的引脚将被映射到IO13和IO15,可使用这两个引脚作为串口与MCU通信。

在8266 NonOS 3.x SDK 中可用过如下操作实现上述功能:

在主函数中调用 

system_uart_swap();

函数交换串口引脚,交换后串口数据就重IO13和IO15输入输出了。

保证IO15在芯片上电的瞬间为低电平,系统才能正常启动。