已解决 | STC8H4K64TL串口接收数截取加CRC 校验出现的奇怪问题
大神们帮忙分析一下,谢谢。问题情况,在接收到数据后截取程序,然后进行CRC计算导致接收数据都不正确。
分3种情况:
1、在接收数据不转存时,计算的CRC有时正确有时不正确。
2、在接收数据转存后,不进行CRC计算,直接输出正确。
3、在接收数据转存后,进行CRC计算,接收到的数据输出错误。
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';
}
改成这样数据就错了,为什么呢?
Matrix 发表于 2026-2-20 21:00
if(Flag_GetData == 1)
{
for(i=0; i
为什么在这里插了4个0x42呢?应该有一个在最后啊?插入4个造成CRC计算错误。什么原因呢? 问题解决,判断接收数据结束间隔不正确,时间太短,没有接收结束就进行处理。
页:
[1]