天天看点

STC51和STM32使用串口输出中文乱码问题解决

STC51和STM32使用串口输出中文乱码问题解决

问题描述:在进行串口实验时,我们想通过串口调试助手来输出中文信息, 但是我们经常会发现在串口调试助手上会输出乱码,跟我们预期的中文信息不符,见以下图片:

STC51和STM32使用串口输出中文乱码问题解决

解决思路:

1、检查软件串口波特率设置和串口调试助手的波特率设置是否一致;

2、软件串口波特率计算不是整数,跟串口调试助手就难以沟通,所以软件内部波特率最好设置为整数;

3、软件串口输出现在基本上都不设置流控制和校验位,所以串口调试助手不能设置校验位和流控制;

4、串口调试助手有问题,我们可以利用多种串口调试助手去测试,我这边推荐了3个串口调试助手:普中ISP中自带的串口调试助手(通讯效果上会差点,时不时会出现一两个错误字符)、sscom32、SecureCRT,如果都是乱码,说明不是串口调试助手的问题。

5、项目工程损坏(这个问题的出现是我以文件夹的形式存放在百度云中,后来下载工程重新编译后hex文件有问题),需要重新创建工程,再进行编译;

6、集成开发环境IDE的版本过低,我们这里的开发环境是keil4,如果不是keil4版本的希望升级到这个版本或更高版本;

7、项目文件夹中找到main.c文件,注意该文件的编码格式需要选择ANSI编码(原来默认的是UTF-8),可以通过记事本打开,然后保存另存为的方式来修改编码格式;

以上就是我们解决串口输出乱码的基本思路。

下面展示一些

串口打印中文示例

/**************************************************************************************
实验现象:下载程序后打开串口调试助手,将波特率设置为4800		  
接线说明:USB下载线-CH340	   
注意事项:																				
***************************************************************************************/
#include "reg51.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include "stdio.h"

//函数声明
void uartinit(void);
void uart_send_byte(unsigned char c);
void uart_send_string(unsigned char* str);
void delay(void);

void main(void)
{
	uartinit();
	
	while(1)
  	{
		uart_send_string("耿璐小课堂");
		delay();
	}																																																																																					
}


//串口初始化函数
//预设一个串口条件:8数据位、1停止位、0校验位、波特率4800
//初始化的主要工作就是去设置相关的寄存器
void uartinit(void)
{
	SCON=0x50;	//设置为工作方式1(8位串口),允许接收
	PCON=0x80;	//波特率加倍

    //通信波特率相关设置
	TMOD=0x20;	//设置定时器T1为模式2
	TH1=243;
	TL1=243;  //8位自动重装,TH1用完了之后下一个周期TL1会自动重装到TH1去
	
	TR1 = 1;	//开始T1让它开始工作	
}

void uart_send_byte(unsigned char c)
{
		SBUF = 	c;
	  
		//第二步,先确认串口发送部分没有在忙
		while(!TI);
		//第三步,软件复位TI标志位
		TI=0;	
}

void uart_send_string(unsigned char* str)
{
	while (*str != '\0')
	{
		uart_send_byte(*str);
		str++;
	}	
}

void delay(void)
{
	unsigned char i, j;
	for (i=0; i<100; i++)
		for (j=0; j<100; j++);
}
           

这里我出现的打印英文字符没问题,打印中文就出现乱码,这里基本就可以定位为编码格式问题,我们可以利用第6条思路去解决。

1.首先在你的文件中找到main.c文件,然后使用记事本打开,然后保存另存为,选择ANSI编码(原来默认的是UTF-8),替换原来文件。

STC51和STM32使用串口输出中文乱码问题解决
STC51和STM32使用串口输出中文乱码问题解决

2、然后重新编译工程,下载到开发板,再打开串口调试助手,然后我们发现问题已经解决。

STC51和STM32使用串口输出中文乱码问题解决

这么看来,我的问题已经解决,其他思路我也不用在这里用具体示例来赘述了,因为问题都是多种多样的,但如何去处理,我们的心里必须要有一套解决思路,这样我们就可以将出现问题的原因范围慢慢缩小,直到大家能够捕捉到它!

继续阅读