OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8463|回复: 11

STM32硬件CRC能否用在MODBUS中

[复制链接]

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
发表于 2018-10-9 20:47:44 | 显示全部楼层 |阅读模式
5金钱
MODBUS中用的CRC16软件校验,有高低各8位,不知道硬件CRC能否用在MODBUS中,该怎么处理。

最佳答案

查看完整内容[请看2#楼]

标准modbus协议的CRC肯定不可以
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7462
金钱
7462
注册时间
2015-1-15
在线时间
1367 小时
发表于 2018-10-9 20:47:45 来自手机 | 显示全部楼层
标准modbus协议的CRC肯定不可以
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-10-10 02:05:00 | 显示全部楼层

只要两边的校验方法一样就可以用,不过感觉完全没必要,MODBUS的CRC计算,很快的。
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-10-10 17:32:46 | 显示全部楼层
正点原子 发表于 2018-10-10 02:05
只要两边的校验方法一样就可以用,不过感觉完全没必要,MODBUS的CRC计算,很快的。

我看数据手册好像输出的只能是32位CRC,但MODBUS用的是16位的,这没办法吗
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-10-10 19:37:36 | 显示全部楼层
yklstudent 发表于 2018-10-10 18:17
标准modbus协议的CRC肯定不可以

自己写的可以不,可以的话,应该咋弄啊,硬件CRC算出来的值就是32位的吧,该怎么用在MODBUS中。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-10-11 01:58:06 | 显示全部楼层
ljfljf 发表于 2018-10-10 19:37
自己写的可以不,可以的话,应该咋弄啊,硬件CRC算出来的值就是32位的吧,该怎么用在MODBUS中。

我们的XCOM参考代码就有用的CRC,用查表法
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-10-12 22:35:36 | 显示全部楼层
正点原子 发表于 2018-10-11 01:58
我们的XCOM参考代码就有用的CRC,用查表法

我想知道硬件CRC校验能不能用在MODBUS中,本来用的也是查表法,不过硬件的应该比软件的要快,想着换一下,麻烦原子哥指导指导
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-10-13 02:05:04 | 显示全部楼层
ljfljf 发表于 2018-10-12 22:35
我想知道硬件CRC校验能不能用在MODBUS中,本来用的也是查表法,不过硬件的应该比软件的要快,想着换一下 ...

我没用过
你想知道的话,自己验证下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-10-13 17:46:34 | 显示全部楼层
正点原子 发表于 2018-10-13 02:05
我没用过
你想知道的话,自己验证下

谢谢原子哥,好像那个硬件的多项式是固定的,现在不弄了
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6252
金钱
6252
注册时间
2018-6-27
在线时间
534 小时
发表于 2018-12-6 12:48:23 | 显示全部楼层
学习学习,学习学习。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-2-14
在线时间
3 小时
发表于 2020-9-29 15:32:36 | 显示全部楼层
https://blog.csdn.net/kezunhb/ar ... tm_source=blogxgwz0
查了好多资料,终于找到了,使用CRC-16/MODBUS中的配置就OK了。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2022-3-23
在线时间
0 小时
发表于 2022-3-23 17:10:50 | 显示全部楼层
static void MX_CRC_Init(void)
{

  /* USER CODE BEGIN CRC_Init 0 */

  /* USER CODE END CRC_Init 0 */

  /* USER CODE BEGIN CRC_Init 1 */

  /* USER CODE END CRC_Init 1 */
  hcrc.Instance = CRC;
  hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
  hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;
  hcrc.Init.GeneratingPolynomial = 0x8005;
  hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
  hcrc.Init.InitValue = 0xFFFF;
  hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
  hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
  hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  if (HAL_CRC_Init(&hcrc) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CRC_Init 2 */

  /* USER CODE END CRC_Init 2 */

}

可以直接用。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 21:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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