专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
STM32 CRC校验
2019-07-21 07:37
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
8498
28
1342
STM32 CRC32校验很简单,只要调用库函数就可以
可是我现在有一个u8的数组,也想CRC校验,是不是就得自己写代码了啊!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
28条回答
叶萌球
1楼-- · 2019-07-23 09:54
CRC校验原理都一样,只是选的多项式不同,因此会有各种不同的多项式算法.选择的时候一定要注意对应的多项式是不是我们的多项式.
此外校验还有方向的区别,从低位到高位和从高位到低位是不同的.(这点不算很清楚)
推荐两个能计算任意CRC的网站,可以来确定程序源码是否有误.
https://ghsi.de/CRC/
http://www.lammertbies.nl/comm/info/crc-calculation.html
加载中...
电子玩霸
2楼-- · 2019-07-23 10:20
回复【7楼】原味_郭:
---------------------------------
我再STM32F10X的手册CRC一节看到这样一句话 Each write operation into the data register creates a combination of the previous CRC value and the new one,甚是不解,为什么会与之前的值进行结合呢
加载中...
战舰水手
3楼-- · 2019-07-23 10:33
看看内容来
加载中...
513393302@qq.co
4楼-- · 2019-07-23 12:47
楼主可以参考下面的代码,测试没有问题,和STM32F1 及F4内部CRC计算结果完全相同
#define STM32_CRC_DEF 0x04c11db7 //STM32硬件CRC计数等式
u32 RETURN_CRC_DATA(u32 *DATA_BUF, u16 len)
{
u32 xbit = 0 ; //CRC计算式计算 扫描变量
u32 data = 0 ; //当前用于CRC的数据缓存
u32 CRC_DATA = 0xFFFFFFFF; // CRC数据寄存器 返回值
u8 bits = 0 ; //位计数变量
while (len--)
{
xbit = 0x80000000;
data = *DATA_BUF++;
for(bits = 0; bits < 32; bits++)
{
if(CRC_DATA & 0x80000000) //CRC计算式计算
{
CRC_DATA <<= 1;
CRC_DATA ^= STM32_CRC_DEF;
}
else
{
CRC_DATA <<= 1;
}
if (data & xbit) //CRC计算式计算
{
CRC_DATA ^= STM32_CRC_DEF;
}
xbit >>= 1;
}
}
return CRC_DATA;
}
加载中...
njjh1718
5楼-- · 2019-07-23 13:21
精彩回答 2 元偷偷看……
加载中...
钩月黄昏
6楼-- · 2019-07-23 18:51
那如果用STM32自带的CRC校验,但是字节数量不是4的倍数怎么办
加载中...
上一页
1
2
3
4
5
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
此外校验还有方向的区别,从低位到高位和从高位到低位是不同的.(这点不算很清楚)
推荐两个能计算任意CRC的网站,可以来确定程序源码是否有误.
https://ghsi.de/CRC/
http://www.lammertbies.nl/comm/info/crc-calculation.html
---------------------------------
我再STM32F10X的手册CRC一节看到这样一句话 Each write operation into the data register creates a combination of the previous CRC value and the new one,甚是不解,为什么会与之前的值进行结合呢
#define STM32_CRC_DEF 0x04c11db7 //STM32硬件CRC计数等式
u32 RETURN_CRC_DATA(u32 *DATA_BUF, u16 len)
{
u32 xbit = 0 ; //CRC计算式计算 扫描变量
u32 data = 0 ; //当前用于CRC的数据缓存
u32 CRC_DATA = 0xFFFFFFFF; // CRC数据寄存器 返回值
u8 bits = 0 ; //位计数变量
while (len--)
{
xbit = 0x80000000;
data = *DATA_BUF++;
for(bits = 0; bits < 32; bits++)
{
if(CRC_DATA & 0x80000000) //CRC计算式计算
{
CRC_DATA <<= 1;
CRC_DATA ^= STM32_CRC_DEF;
}
else
{
CRC_DATA <<= 1;
}
if (data & xbit) //CRC计算式计算
{
CRC_DATA ^= STM32_CRC_DEF;
}
xbit >>= 1;
}
}
return CRC_DATA;
}
一周热门 更多>