编译串口时乱码
① 串口调试乱码的原因
1.USB转串口的问题
解决方法:我曾用一个12块钱的那种U转串,出现过乱码,换一个好的就没事了
2.波特率不同步的问题
解决方法:两边设置的波特率的一样,会导致这样的问题
3.在通信波特率为 38400 时,通信正常,arm 板上解受到的数据(ascII码)显示正常。
但是当波特率为 115200
时,解受到的数据就出现乱码的现象!
解决方法:暂无
4.用ARM2103 给电脑发送信息,用串口高度精灵看,一直接收的都是错误码
解决方法: 我用的44b0曾经出现过显示乱码的问题,在超级终端上显示的;
后来才发现是在boot汇编程序里设置了主频为60M;但是在串口初始化时用的是40M,在c语言程序里忘记重新设定主频了
② 串口接收到乱码什么原因
乱码很正常,因为是通讯嘛,硬件的接收当然要可能出现预料外的数据,比如,有些调制方式的Modem就是会必定产生乱码,足够强的电磁干扰信号也可能让数据出错。乱码是有的,但不存在“多余的”这样的概念,如果你觉得“多余”,那只是你通讯协议没制定好。
串口的协议,通常情况下格式是这样的:起始字(多字节),数据区长度(根据需要,一般是1或2字节),校验和(多字节),数据区(多字节)。
每个包都如此,起始字一般是全部正常通讯数据中不可能用到的字节序列组合,校验和一般采用CRC校验的为多(这样比较可靠,源代码在网上很多)。
对协议的接收分包工作,是个稍微复杂的编码工作(代码本身不复杂,你需要思维复杂点),你需要定义一个“接受状态”的标志值,每接一个字节变换一次状态值,它标志着你下一次将接收什么字节,比如:起始字字节1,起始字字节2,……,数据区长度字节1,数据区长度字节2,……,校验和字节1,校验和字节2……,数据区(已经进数据区了,因为已经知道长度,只积攒缓冲而已,一个标志就够)。积攒完数据区字节后,计算校验和,如果不符合前面协议给的结果,则将“接受状态”的标志值复位(将接收起始字字节1),从前面的起始字字节2开始(模拟接收)重复上面过程。以上这个过程需要你熟练编码操控二进制缓冲区。
有很多人把数据结构指针当发送缓冲,后面跟一个sizeof()就直接发出去;接收那端直接预期有多少字节数据,死等在那里;或者,按时间去接受(规定协议间要间隔若干秒),这些都是丝毫不懂通讯的胡作非为,早晚要出问题,如果你代码里有这些做法,推荐你早点把它们改过来。
对串口通讯的接收,实际上用计算机处理起来是这样的:串口是按位接收数据的,但PC机的底层硬件和软件已经能按标准协议规定把位缓冲并识别转换成字节了,不过,每收一个字节的时间远比PC机程序运行慢得多,因此,对你的程序而言,接收的数据,其实就是一串无限长的字节任意序列慢慢向你走来,你一次只能见到一个,任何一个字节都与其他字节没什么特殊地方,它们可能是数据包的一部分或几个数据包,也许有的是错的,甚至根本全是错的,这全靠你程序去分辨——在了解了这些实际的基础上,你才可以设计你的协议和程序。
③ 串口输出乱码
很简单
线序问题:
两个设备的发送和接收
要交叉连接(即发送对接收
接收对发送)
如果连接错误
无任何反映
波特率问题:
如果线序正确
波特率不一样
就会有乱码出现
还有一种串口自检的方法:
用跳线把串口的发送和接收短接
就是串口的
2脚
3脚
能够实现自发自收
这样能检测串口工作是否正常
是否可以解决您的问题?
④ 串口通信 出现乱码
串口通讯不正常,我的分析如下:
一、能正常的自收自发,只能说明自身的收和发设置正确,需要检查ARM2103的设置和电脑的是否相同。同意4楼的说法,看看校验位,数据位数是否都对应上了。
二、波特率需要用示波器测试一下,发送一个0x55,看看,一bit用的时间,计算一下,看看波特率到底对不对。自收自发,说明收发双方波特率相同,看不出波特率对不对,这样就不用猜测是否是波特率的问题了。用实践检验。
三、如果串口高度精灵也能自收自发,上述都没问题,你就得考虑一下通讯电路的问题了。你的232通讯芯片如果供电是3.3V,芯片周围的电容用的是0.1uF,可能会出现这样的情况。你把4个0.1uF的改成1uF的试试吧,不同厂家的232芯片也会造成差异。我遇到过这种情况。如能改成5V供电就试试。
祝你顺利
⑤ C#编写的串口上位机,显示中文偶尔乱码,求解决。
你可以先按十六进制显示,然后对比你收到的十六进制与你输入内容的十六进制之间的差异。
一般来说这种现象出现的原因是你上下位机没有规定好通讯协议,而是直接将收到的任何内容直接进行转码显示,因为串口本身有缓冲区,你下位机一次发出来的内容,在上位机可能两次才能接收到,如果中断的地方刚好是中文,自然就出来半个字符那就是乱码了。
⑥ 串口调试助手一直出现乱码
串口助手左侧有个接收设置,将hex改成ascii试一次。
⑦ 串口出乱码/无输出的原因
很简单
线序问题:两个设备的发送和接收要交叉连接(即发送对接收接收对发送)
如果连接错误无任何反映
波特率问题:如果线序正确波特率不一样就会有乱码出现
还有一种串口自检的方法:
用跳线把串口的发送和接收短接就是串口的2脚3脚能够实现自发自收
这样能检测串口工作是否正常
⑧ 串口显示乱码的原因有哪些
1.USB转串口的问题
解决方法:我曾用一个12块钱的那种U转串,出现过乱码,换一个好的就没事了
2.波特率不同步的问题
解决方法:两边设置的波特率的一样,会导致这样的问题
3.在通信波特率为
38400
时,通信正常,arm
板上解受到的数据(ascII码)显示正常。
但是当波特率为
115200
时,解受到的数据就出现乱码的现象!
解决方法:暂无
4.用ARM2103
给电脑发送信息,用串口高度精灵看,一直接收的都是错误码
解决方法:
我用的44b0曾经出现过显示乱码的问题,在超级终端上显示的;
后来才发现是在boot汇编程序里设置了主频为60M;但是在串口初始化时用的是40M,在c语言程序里忘记重新设定主频了
⑨ 关于串口接收数据是乱码的问题
只是做通讯的话没关系,乱码不影响你的通讯,通讯协议肯定是以字节形式定义的,与字符无关。你那个乱码就是字符库的问题,数值已经通讯上了。
⑩ 调试串口为什么会一直打印乱码
显示乱码很可能是没有使用TTL转232,手册里说需要USB转串口模块或TTL转232模块,很多人误理解USB转串口模块是下图连接线,那你就大错特错了,有部分初学者会把开发套件上的串口rx,tx脚使用杜邦线直接连到下图所示的串口2,3,脚,另一端USB接到电脑,这样电脑就出现了乱码。