找回密码
 立即注册
查看: 146|回复: 5

STC32G144K246的CRC模块计算MODBUS_RTU的CRC值不对,为什么?

[复制链接]
已绑定手机

4

主题

4

回帖

102

积分

注册会员

积分
102
发表于 2026-9-14 18:33:01 | 显示全部楼层 |阅读模式
用AICUBE生成的函数:CRC_Calculate(uint8_t *dat, int size)计算MODBUS_RTU的CRC值不对,用0x01,0x03,0x00,0x00,0x00,0x01返回值是0x92B9,正确值应该是:0x840a.不知道什么原因?

本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

28

主题

1327

回帖

5046

积分

超级版主

积分
5046
发表于 2026-9-15 09:13:49 | 显示全部楼层
STC32G144K246的CRC模块在设计时有个BUG
必须CKCON寄存器设置为0,CRC才能计算正确


你计算MODBUS_RTU的CRC值不对,应该是将CKCON设置为1的缘故
将CKCON设置为0,重新计算应该就正确了

点评

淘理由:STC32G144K246 CRC模块的BUG。  发表于 2026-9-15 11:31
回复

使用道具 举报 送花

已绑定手机

4

主题

4

回帖

102

积分

注册会员

积分
102
 楼主| 发表于 2026-9-15 11:43:47 | 显示全部楼层
将CKCON设置为0,也不可行,因为有DMA,CKCON设置为0会出错。不过这个问题不大。CRC用查表法是非常快的,不太需要这个模块。
回复

使用道具 举报 送花

12

主题

29

回帖

350

积分

中级会员

积分
350
发表于 3 天前 | 显示全部楼层
zh*** 发表于 2026-9-15 09:13
STC32G144K246的CRC模块在设计时有个BUG
必须CKCON寄存器设置为0,CRC才能计算正确

有没有其他的解决方法,因为要使用DMA,如果计算时先设为0,计算后再设为1的话,这个过程中DMA传输可能会有问题

点评

基于CKCON的原因,CRC和DMA不能同时使用 除非分时复用,确定CKCON为0时没有DMA在后台运行 否则建议使用查表法实现CRC  详情 回复 发表于 3 天前
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

28

主题

1327

回帖

5046

积分

超级版主

积分
5046
发表于 3 天前 | 显示全部楼层
29*** 发表于 2026-11-5 09:23
有没有其他的解决方法,因为要使用DMA,如果计算时先设为0,计算后再设为1的话,这个过程中DMA传输可能会 ...

基于CKCON的原因,CRC和DMA不能同时使用
除非分时复用,确定CKCON为0时没有DMA在后台运行
否则建议使用查表法实现CRC
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-8 01:28 , Processed in 0.074294 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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