江湖书生 发表于 2017-11-24 17:00:06

用STM32L05x的CRC模块做modbus CRC16计算

根据参考文档,CRC模块可以配置CRC多项式,应该可以做(Modbus)CRC16计算,自己试了一下,发现结果不正确,总是一个固定值,不知道为什么?另外多项式应该是0x8005还是0xA001?

农夫水0533 发表于 2017-11-28 10:15:06

如果是16位的POL寄存器设置0x1021即可。

江湖书生 发表于 2017-11-30 15:52:14

农夫水0533 发表于 2017-11-28 10:15
如果是16位的POL寄存器设置0x1021即可。

CRC16有两个计算多项式(百度百科),Modbus用的是x16+x15+x2+1,对应的多项式值是0x8005,但是有人说是0xA001。modbus协议的描述文档中,举例的C计算程序,其初始值也是0xA001。

江湖书生 发表于 2017-11-30 15:52:30

农夫水0533 发表于 2017-11-28 10:15
如果是16位的POL寄存器设置0x1021即可。

CRC16有两个计算多项式(百度百科),Modbus用的是x16+x15+x2+1,对应的多项式值是0x8005,但是有人说是0xA001。modbus协议的描述文档中,举例的C计算程序,其初始值也是0xA001。

农夫水0533 发表于 2017-12-1 10:53:56

江湖书生 发表于 2017-11-30 15:52
CRC16有两个计算多项式(百度百科),Modbus用的是x16+x15+x2+1,对应的多项式值是0x8005,但是有人说是0xA0 ...

我用的多项式是X16+X15+X2+1设置是0x1021 ,是正常可用。

江湖书生 发表于 2017-12-4 13:44:33

农夫水0533 发表于 2017-12-1 10:53
我用的多项式是X16+X15+X2+1设置是0x1021 ,是正常可用。

谢谢:)!我试试看。

江湖书生 发表于 2017-12-4 13:47:55

农夫水0533 发表于 2017-12-1 10:53
我用的多项式是X16+X15+X2+1设置是0x1021 ,是正常可用。

谢谢!回头我试试看。但是想知道0x1021是怎么来的:),能讲一下吗?

土司Apple 发表于 2018-5-30 14:47:21

是不是 大端用A001小端用8005呢?
页: [1]
查看完整版本: 用STM32L05x的CRC模块做modbus CRC16计算