欢迎加入交流群:ESP8266 AliOS Things 群 号: 107723112
所有教程请看 AliOS Things 入门教程系列
此教程在SimonLiu的CSDN博客同步更新。
ESP8266有两个串口:
uart0和uart1,其中uart1的RXD被Flash占用,只提供了发送引脚(GPIO2,即UART1_TXD)。通常情况下,我们使用uart0和外设通讯,而使用uart1作为日志打印端口。
小贴士: 如果使用串口接收外设数据,请先关闭CLI,否则可能导致收取数据丢帧或者发生其他错误。
首先,打印有两种方式:
- LOG()
- printf()
SimonLiu基于AliOS自带的example\uart.c进行修改,分别使用LOG()和printf()进行打印:
printf("[%d] -- Message from printf -- \r\n",(unsigned)aos_now_ms());
LOG("== Message from LOG ==\r\n");
注:(unsigned)aos_now_ms()看函数名就可以猜出来它返回的值是系统本次上电启动以后的时间(毫秒)。LOG()自带这个时间戳。
SimonLiu直接基于AliOS的代码测试结果为:
-
LOG()在UART0_TXD(GPIO1)输出信息 -
printf()在UART1_TXD(GPIO2)输出信息
如果你需要LOG()也使用UART1_TXD(GPIO2)作为输出引脚,那么需要进行如下修改:
-
platform\mcu\esp8266\bsp\driver\uart.c中 找到LOCAL void uart1_write_char(char c), 改为void uart1_write_char(char c),也就是移除LOCAL属性。 -
platform\mcu\esp8266\hal\uart.c文件中,找到int32_t hal_uart_send()函数,把uart0_write_char(pdata[i]);
修改为如下内容(感谢小徐提供的方案):
if (uart->port == 1)
uart0_write_char(pdata[i]);
else
uart1_write_char(pdata[i]);