ningsane 发表于 2026-1-30 11:20:46

STC8A8K64D4串口通讯个别字符错误

STC8A8K64D4串口通讯个别字符错误,一百四十个字符,偶尔有个别的数据别替换。具体是:0a 00 被替换成了0D 0D,还有好几个数据被替换成了3F。如果通讯数据中没有被替换的特殊字符,那么数据串是正确的。有个别的特殊字符,那么数据串就错误了。开始怀疑是printf的问题,后来不使用printf输出查看,只在程序中判断校验是否正确,还是校验不通过。很是奇怪。把数据带入到校验算法中都是没有问题。

宁阳刘德华 发表于 2026-1-30 11:33:08

换外部晶振试试,是不是晶振频率精度不准确,通讯电缆换成带屏蔽层的。

21cnsound 发表于 2026-1-30 11:36:19

难道字符串中有FD?有没有打FD补丁?

ningsane 发表于 2026-1-30 11:37:18

正确的是上图,被修改的是下图

lcwswust 发表于 2026-1-30 11:56:54

这是在烧写程序?加密传输?

ningsane 发表于 2026-1-30 12:18:25

这个程序是在做远程升级的一部分。服务器发送出base64编码的数据,经过4G模块到STC8A8K64D4。再把原来的数据串解码出来,16*8行程序加上数据头,校验位等组成一串数据下发。MCU收到数据后再把数据串还原出来。数据还原出来后就是上面出问题的数据串。开始怀疑是base64解码算法的问题,后来改变了另一种算法。把一个字符十六进制比如0X8B,拆成两个字符‘8’和'B'发送,MCU还原后校验还是同样的问题。这个还不是字符乱码的问题。是个别的字符出的问题。初步接收后MCU输出原来字符串判断,是正确的。解码后校验就不正确了。单片机输出数据串查看,就是上面图上的比对图。

ningsane 发表于 2026-1-30 12:20:03

21cnsound 发表于 2026-1-30 11:36
难道字符串中有FD?有没有打FD补丁?

STC8A8K64D4中的程序,需要怎么做打FD补丁?

DebugLab 发表于 2026-1-30 13:05:52

3F是连续的0或1,检查是否受到干扰,示波器测量看一下
注意IO模式,TXD推挽,RXD高阻打开4K上拉

ningsane 发表于 2026-1-30 15:12:49

lcwswust 发表于 2026-1-30 11:56
这是在烧写程序?加密传输?

没有加密,只是一个简单的把十六进制变成字符串进行传输。

lcwswust 发表于 2026-1-30 15:26:04

ningsane 发表于 2026-1-30 15:12
没有加密,只是一个简单的把十六进制变成字符串进行传输。

也就是说,这是两个单片机的事,初步怀疑是接收方的问题,那么能否排除硬件本身的问题呢?

比如用一个USB转TTL来监测接收方单片机RXD脚收到的数据,且接收方单片机可以将收到的原始数据再发到串口助手,二者作个对比就知道了。
页: [1] 2
查看完整版本: STC8A8K64D4串口通讯个别字符错误