OpenEdv-开源电子网

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

求来个stm32和c#通用的crc算法

[复制链接]

2

主题

8

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-5-8
在线时间
2 小时
发表于 2017-5-11 17:01:18 | 显示全部楼层 |阅读模式
10金钱
crc16或者crc8都可以。关键是两边的运算结果要一样。我在网上找了好几个算法,但是放在c#和单片机上运行,结果都不一样。。代码基本是一样的。但是就是结果不一样。。还有就是为什么我用串口向stm32发送信息,我没有在stm32设置向上位机发送数据的函数,但是单片机每次接收到数据都会向上位机发送几个乱码的数据。
乱码.jpg

最佳答案

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

最近也在搞 下位机的程序 给你吧 /**************************************************************************** * 名称:uart_crc() * 功能:串口数据 CRC16 运算程序 * 入口参数:unsigned char* data , unsigned char length * 出口参数:unsigned short ****************************************************************************/ unsigned short uart_crc(unsigned char* data , unsigned char ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2015-6-15
在线时间
250 小时
发表于 2017-5-11 17:01:19 | 显示全部楼层
最近也在搞

下位机的程序 给你吧

/****************************************************************************        
* 名称:uart_crc()
* 功能:串口数据 CRC16 运算程序
* 入口参数:unsigned char* data , unsigned char length
* 出口参数:unsigned short
****************************************************************************/
unsigned short uart_crc(unsigned char* data , unsigned char length)
{
        unsigned short reg_crc;           
        unsigned short s_crcchk;           
        s_crcchk = 0;        
        reg_crc = 0xffff;
        while(length--)
                {;
                reg_crc ^= *data++;
                for(s_crcchk = 0; s_crcchk < 8; s_crcchk ++)
                        {
                        if(reg_crc & 0x01)
                                {
                                reg_crc = (reg_crc >> 1) ^ 0xa001;
                                }
                        else
                                {
                                reg_crc = reg_crc >> 1;
                                }
                        }
                }
return reg_crc;
}
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-5-8
在线时间
2 小时
 楼主| 发表于 2017-5-11 17:04:27 | 显示全部楼层
1l是电脑跟stm32都是波特率115200的时候,但是当电脑的串口调试助手波特率改为9600.接收区就会收到跟发送区一模一样的数字。有大佬知道这是什么情况吗。我百度也没有百度出来这是什么情况
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-5-8
在线时间
2 小时
 楼主| 发表于 2017-5-11 17:04:48 | 显示全部楼层
@正点原子  可以@嘛...
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-11 18:46:11 | 显示全部楼层
说明你的串口有问题。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-11 18:46:41 | 显示全部楼层
CRC部分,一般都不会有问题,论坛搜索,参考下别人的
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-5-8
在线时间
2 小时
 楼主| 发表于 2017-5-11 20:23:40 | 显示全部楼层
正点原子 发表于 2017-5-11 18:46
说明你的串口有问题。。。

串口硬件的问题嘛?那没办法了。。但是为什么串口调试助手波特率设置为9600可以收到发送的信息,是用你的那个实验pwm波改的一个程序。,改了下输出pwm波的串口。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-5-8
在线时间
2 小时
 楼主| 发表于 2017-5-11 20:36:53 | 显示全部楼层
正点原子 发表于 2017-5-11 18:46
CRC部分,一般都不会有问题,论坛搜索,参考下别人的

恩,我找到了你之前发的一份,主要代码是完全一样的,但是在c#里面和crc里面生成的校验码不一样,就不知道是什么情况。所以想着是不是单片机有些算法跟电脑不太一样
回复

使用道具 举报

9

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-7-18
在线时间
22 小时
发表于 2017-7-8 16:02:36 | 显示全部楼层
brilliant 发表于 2017-5-16 13:43
最近也在搞

下位机的程序 给你吧

感谢分享
回复

使用道具 举报

1

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2019-8-29
在线时间
31 小时
发表于 2019-9-3 17:10:43 | 显示全部楼层
brilliant 发表于 2017-5-11 17:01
最近也在搞

下位机的程序 给你吧

非常感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 10:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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