欢迎加入交流群: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]);