VSCODE/platformIO: Arduino框架下,单片机打印信息至串口监视器,三种输出乱码+一种无输出的情况与解决方案

(一)串口打印输出乱码的情况:

情况1:串口波特率不匹配

错误描述:

platformIO的串口监视器默认波特率是9600,8-N-1模式。
如果设备打印串口的默认波特率与此不符,便会产生乱码。

解决方法:

在这里插入图片描述
在项目根目录下的该文件中,设置串口监视器的波特率:
在这里插入图片描述
最下方一行即为监视器波特率。同时,在程序中,设置Arduino的串口输出函数的波特率同为9600:
在这里插入图片描述
如此即可。值得一提的是,通过这样的操作,串口信息打印的波特率,便可以跟通过串口烧录程序时使用的波特率、该板子预设中默认配置的波特率解开关系。可以在每个项目中如此显式指定,以防万一。

情况2:字符集设置问题

错误描述:

platformIO的串口监视器的默认字符集是UTF-8。有些时候它跟单片机打印串口时所用的字符集不匹配,也会导致乱码。

解决方法:

在platformio.ini文件中设置串口监视器字段,如下:
在这里插入图片描述
比如在此即设置编码规则为gb2312。

可通过以下文档查阅platformIO支持的监视器字符集:
点击查看
以及以下连接查看官方相关说明文档:
docs.platformio.org

情况3:VSCODE文本查看编码设置异常

在这里插入图片描述

错误描述:

VSCODE界面右下角,设置了其界面字符查看的编码设置。该编码如果有误亦会显示乱码。且是代码编辑窗内也可能会显式乱码。

解决方法:

点击按提示改之即可。

(二)一种串口打印无输出的情况:

错误描述:

这种情况是由ESPIDF项目迁移过来的时候导致的。ESPIDF中习惯使用ESP_LOGI()之类的宏打印信息,但是这些宏在转到arduino框架之后都会被置换为一个什么都不做的 do{}while(0)函数。

解决方法:

在arduino框架下自然可以使用其Serial系列打印函数。

(三)最后还有一种难以消除的乱码的情况:

我的开发板是一个esp-wroom-32的民间板子。它在开机之后便会输出乱码如下:
在这里插入图片描述

这种乱码只在重新上电时触发,其不影响用户正常串口打印输出;并且这种乱码只出现在重新上电时;其长短会随着波特率的增加而增加(图中是9600时的两次上电乱码的长度,460800的时候会延伸至整整三行);并且每次上电乱码内容不同,随机变换。推测是芯片重新上电时的信号干扰所致。
尝试过在一开始单片机内软件禁用串口输出,但这方法无效。故而佐证应是线路扰动。
解决方法是换板子——以及——忍一忍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值