- 打卡等级:偶尔看看I
- 打卡总天数:16
- 最近打卡:2025-04-30 08:18:51
中级会员
- 积分
- 333
|
发表于 2025-4-23 14:12:51
|
显示全部楼层
你好版主,我有类似的CRC校验问题,情况如下
目前使用的CRC校验程序如下--直接复制梁工的。
//========================================================================
// 函数: u16 MODBUS_CRC16(u8 *p, u8 n)
// 描述: 计算CRC16函数.
// 参数: *p: 要计算的数据指针.
// n: 要计算的字节数.
// 返回: CRC16值.
// 版本: V1.0, 2022-3-18 梁工
//========================================================================
u16 MODBUS_CRC16(u8 *p, u16 n)
{
u16 i;
u16 crc16;
crc16 = 0xffff; //预置16位CRC寄存器为0xffff(即全为1)
do
{
crc16 ^= (u16)*p; //把8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器
for(i=0; i<8; i++) //8位数据
{
if(crc16 & 1) crc16 = (crc16 >> 1) ^ 0xA001; //如果最低位为0,把CRC寄存器的内容右移一位(朝低位),用0填补最高位,
//再异或多项式0xA001
else crc16 >>= 1; //如果最低位为0,把CRC寄存器的内容右移一位(朝低位),用0填补最高位
}
p++;
}while(--n != 0);
return (crc16);
}
发送的数据是:01 03 00 00 00 04 44 09
接收的数据是:01 03 08 01 02 03 04 05 06 07 00 36 21
用MODBUSPOLL连接反馈CRC校验错误,
我用工具软件中的CRC去校验得出的数据为
01 03 08 01 02 03 04 05 06 07 00 64 D5 下载软件CRC计算得出的数据
01 03 08 01 02 03 04 05 06 07 00 36 21
这两个数据是一样的,就是CRC校验不一样。能烦请帮忙指点下问题在哪里
|
|