STM32使用printf通过串口输出中文出现乱码的解决方法

假设使用printf的文件是main.c,自己要输出的汉字是GB2312编码格式,则按以下顺序排查
1、核对main.c的编码格式是否为GB2312。如果用vscode编写代码,则在vscode的右下角查看。然后检查mdk5的编码格式是否为GB2312。如下图所示。
注意:如果mdk5的编码格式不是GB2312,或者文件的编码格式不是GB2312,此时中文有可能是可以在vscode或mdk5中正常显示的,但mdk5编译的时候会把这些中文汉字按照mdk5设置的编码格式进行编译,编译后的数据并不是这些汉字在GB2312中的编码
例如:汉字【测】在GB2312的编码是0xB2E2,如果mdk5按照main.c文件的utf8格式对【测】进行编译,编译后的数据并不是0xB2E2,此时单片机给串口软件发送的不是0xB2E2,那么串口软件显示的就不是汉字【测】,从而被用户认为显示乱码
image

2、核对单片机串口输出的数据是否正确。将串口软件显示的数据格式改为16进制显示。然后在GB2312编码表查看自己想要输出的汉字的编码,核对串口输出的16进制数据是否正确,如下图所示。
编码表网址:https://www.toolhelper.cn/Encoding/ASCII
image

3、如果前面2步没有问题,请考虑单片机和串口软件两者的串口波特率是否匹配、数据格式是否匹配(例如1bit起始位、8bit数据位、1bit停止位)。

4、如果要显示的中文是GBK编码格式或其他编码格式,请考虑mdk5的编码格式和你的串口软件是否支持这些编码格式的中文。

posted @ 2023-04-02 15:26  zhaoo_o  阅读(2470)  评论(0编辑  收藏  举报