找回密码
 立即注册
查看: 63|回复: 3

已解决 | STC8H4K64TL串口接收数截取加CRC 校验出现的奇怪问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:214
  • 最近打卡:2026-03-07 06:03:54

13

主题

154

回帖

867

积分

高级会员

积分
867
发表于 2026-2-20 20:48:10 | 显示全部楼层 |阅读模式
大神们帮忙分析一下,谢谢。

问题情况,在接收到数据后截取程序,然后进行CRC计算导致接收数据都不正确。
分3种情况:
1、在接收数据不转存时,计算的CRC有时正确有时不正确。
截图202602202043165614.jpg 截图202602202043395725.jpg 截图202602202044292158.jpg

2、在接收数据转存后,不进行CRC计算,直接输出正确。

截图202602202045046037.jpg 截图202602202045427570.jpg 截图202602202046062217.jpg

3、在接收数据转存后,进行CRC计算,接收到的数据输出错误。
截图202602202046384870.jpg    截图202602202047102384.jpg






截图202602202044252975.jpg
截图202602202045342937.jpg
截图202602202047147976.jpg

STC8H_Template.rar

143.26 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:214
  • 最近打卡:2026-03-07 06:03:54

13

主题

154

回帖

867

积分

高级会员

积分
867
发表于 2026-2-20 21:00:22 | 显示全部楼层
                if(Flag_GetData == 1)
                {
                        for(i=0; i<Uart1_Getlen; i++)        Uart1_SendChar(Uart1_Get);        //收到的数据原样返回       
//                        CRC16_result = MODBUS_CRC16(Uart1_Get, Uart1_Getlen-2);
////                        CRC16_result = MODBUS_CRC16(frame, 6);
//                        CRC16_H = CRC16_result / 256;
//                        CRC16_L = CRC16_result % 256;       
//                        Uart1_SendChar(CRC16_H);
//                        Uart1_SendChar(CRC16_L);
                       
                        if(MODBUS_CRC16(Uart1_Get, Uart1_Getlen) == 0)        //首先判断CRC16是否正确, 不正确则忽略, 不处理也不返回信息
                        {
                                Uart1_SendChar('A');
                        }
                        else
                                Uart1_SendChar('B');
                       
                        Flag_GetData = 0;
                        for(i=0; i<COM_RX1_Length; i++)                Uart1_Get = '\0';
                }

改成这样数据就错了,为什么呢?
截图202602202100161434.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:214
  • 最近打卡:2026-03-07 06:03:54

13

主题

154

回帖

867

积分

高级会员

积分
867
发表于 2026-2-20 21:19:34 | 显示全部楼层
Mat*** 发表于 2026-2-20 21:00
if(Flag_GetData == 1)
                {
                        for(i=0; i

为什么在这里插了4个0x42呢?应该有一个在最后啊?插入4个造成CRC计算错误。什么原因呢?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:214
  • 最近打卡:2026-03-07 06:03:54

13

主题

154

回帖

867

积分

高级会员

积分
867
发表于 2026-2-21 07:32:41 | 显示全部楼层
问题解决,判断接收数据结束间隔不正确,时间太短,没有接收结束就进行处理。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 15:31 , Processed in 0.108587 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表