串口输出中文乱码
- 问题产生
- 寻找问题产生的原因
- 解决问题
- 总结
- 推荐两个串口助手:
问题产生
最近在使用OpenMV
,但是由于没有转接板和软排线来连接串口,不过手上有一块STM32F4
的开发板,于是就想到将其作为一个转接,通过其接收OpenMV
发送的数据,并将其转发到电脑上,结果串口助手一直输出乱码。
寻找问题产生的原因
一开始以为是自己波特率设置的有问题,但是查验后并不是,PC
,OpenMV
,STM32
之间设置的波特率都是对应的。然后又以为是自己改过STM32F4
的时钟频率,然后开始查STM32
时钟频率的设置,发现也没问题。怎么也找不到问题在哪。/(ㄒoㄒ)/~~
后来突然想到OpenMV
是使用MicorPython
语言写的,一般的字符编码为UTF-8
,而STM32
用的是keil
的IDE开发的,编码格式一般为ASNII
,两个字符编码不一样也会导致乱码,于是将其都改为UTF-8
编码,结果乱码依旧。。。 (╯‵□′)╯︵┻━┻
为了继续查找问题所在,先是将OpenMV
发送给STM32
数据直接返回OpenMV
结果正确,然后将串口助手发送给STM32
的数据直接返回,结果正确。由此可以看出,串口助手和OpenMV
的字符编码不一致导致的乱码。这里给出一个网址,可以在线转换乱码。乱码恢复 。从中我们可以看到,前后的编码不一致。
至此,找到了问题所在,串口助手不支持UTF-8
编码。( ̄_ ̄|||)
解决问题
既然串口助手不支持,那就找支持的串口助手,或者自己开发一个(暂时有点想法)。目前使用的星瞳串口助手,接收结果如下:
总结
串口助手显示中文乱码的原因有以下几点:
- 波特率不对应。
- 字符编码不对应。
- 串口助手不支持字符编码方式。
推荐两个串口助手:
- 星瞳串口助手SingTownSerialport(支持Mac,Windows,Ubuntu)
- 串口调试助手(Windows)