源:STM32 CRC32与对应的软件CRC32

简单实现STM32 CRC32使用

使用前记得使能STM32 CRC时钟

//STM32硬件CRC32 byte数据计算,将数据移到最高位,低位补上FF
u32 stm32_crc32_byte(u8 *pBuff, u32 len)
{
u32 i;
u8 buff[];
u32 *p32 = (u32 *)buff; CRC->CR = ; //复位CRC寄存器
buff[] = buff[] = buff[] = buff[] = 0XFF;
for(i = ;i < len;i ++)
{
buff[] = pBuff[i];
CRC->DR = *p32;
}
return CRC->DR;
} //STM32硬件CRC32 u32数据计算
u32 stm32_crc32(u32 *pBuff, u32 len)
{
u32 i; CRC->CR = ; //复位CRC寄存器
for(i = ;i < len;i ++)
{
CRC->DR = pBuff[i];
}
return CRC->DR;
} //软件CRC32 u32数据计算
u32 crc32(u32 *ptr, u32 len)
{
u32 xbit;
u32 data;
u32 CRC32 = 0xFFFFFFFF;
u32 bits;
const u32 dwPolynomial = 0x04c11db7;
u32 i; for(i = ;i < len;i ++)
{
xbit = << ;
data = ptr[i];
for (bits = ; bits < ; bits++)
{
if (CRC32 & 0x80000000) {
CRC32 <<= ;
CRC32 ^= dwPolynomial;
}
else
CRC32 <<= ;
if (data & xbit)
CRC32 ^= dwPolynomial; xbit >>= ;
}
}
return CRC32;
} //软件CRC32 byte数据计算,将数据移到最高位,低位补上FF
u32 crc32_byte(u8 *ptr, u32 len)
{
u32 xbit;
u32 data;
u32 CRC32 = 0xFFFFFFFF; //初值
u32 bits;
u32 i;
u8 buff[];
u32 *p32 = (u32 *)buff;
const u32 dwPolynomial = 0x04c11db7; buff[] = buff[] = buff[] = buff[] = 0XFF;
for(i = ;i < len;i ++)
{
xbit = << ; buff[] = ptr[i];
data = *p32;
for(bits = ; bits < ; bits++)
{
if (CRC32 & 0x80000000) {
CRC32 <<= ;
CRC32 ^= dwPolynomial;
}
else
CRC32 <<= ;
if (data & xbit)
CRC32 ^= dwPolynomial; xbit >>= ;
}
}
return CRC32;
}

参考:STM32的硬件CRC32使用

STM32 CRC32与对应的软件CRC32(转)的更多相关文章

  1. U8g2图形库与STM32移植(I2C,软件与硬件)

    U8g2图形库 简介 U8g2 是一个用于嵌入式设备的简易图形库,可以在多种 OLED 和 LCD 屏幕上,支持包括 SSD1306 等多种类型的底层驱动,并可以很方便地移植到 Arduino .树莓 ...

  2. STM32:获取复位源,软件复位

    RCC CSR寄存器会存储复位标示,可通过它来知道复位原因,来源: if(RCC_GetFlagStatus(RCC_FLAG_PINRST)) printf("PINRST\r\n&quo ...

  3. CRC32

    CRC32生成多项式:X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1 对应的16进制表示为:0x4C11DB7 下面贴CRC32查表法生成代码: ...

  4. 加密算法使用(一):用CRC32来压缩32uuid字符串

    CRC32相比MD5重复率较高, 不过我们仍然可以使用CRC32然后转长整形的方式将32位的UUID字符串压缩成更短的整形唯一标识. /** * * @Title: getCRC32Value * @ ...

  5. boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET

    boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET     boost::crc_32_type crc32;       crc32. ...

  6. boost计算随机数和计算crc32简单示例

    boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET boost计算随机数和计算crc32简单示例 2013-02-18 17:14 10 ...

  7. STM32 mdk软件仿真时过不去时钟的问题

    stm32的程序用MDK软件仿真时,由于系统时钟初始化函数里有个等待系统时钟准备好的循环,所以过不去. 设置方式如下:这么设置之后仿真时就可以直接进入main函数了.

  8. CRC-32 校验算法

      crc32的头文件 ===========================分割线=========================== //crc32.h #ifndef _CRC32_H #de ...

  9. 数据安全之MD5、SHA-1、CRC32区别

    crc32 — 计算一个字符串的 crc32 多项式 生成 string 参数的 32 位循环冗余校验码多项式……:这句话从英文翻译过来的,不正确,准确的说应该是这么理解: 以32位循环冗余校验多项式 ...

随机推荐

  1. EL表达式页面间传参(对象参数和普通参数)

    ${param['user.name']}.${param.name}

  2. 【BZOJ2797】[Poi2012]Squarks 暴力乱搞

    [BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj.现在所有取法共n*(n ...

  3. Slave_SQL_Running: No mysql同步故障

    参考:http://blog.itpub.net/29500582/viewspace-1318552/ http://blog.csdn.net/seteor/article/details/172 ...

  4. ORACLE内存结构之SGA

    SGA的管理: SQL> show parameter sga NAME                                 TYPE        VALUE ---------- ...

  5. 【MongoDB】从入门到精通mongdb系列学习宝典,想学mongodb小伙伴请进来

    最近一段时间在学习MongoDB,在学习过程中总共编写了四十余篇博客.从mongodb软件下载到分片集群的搭建. 从理论讲解到实例练习.现在把所有博客的内容做个简单目录,方便阅读的小伙伴查询. 一. ...

  6. Codeforces Round #426 (Div. 2)A题&&B题&&C题

    A. The Useless Toy:http://codeforces.com/contest/834/problem/A 题目意思:给你两个字符,还有一个n,问你旋转n次以后从字符a变成b,是顺时 ...

  7. TCP requires two packet transfers to set up the connection before it can send data

    wHTTP重用现存连接来减少TCP建立时延. HTTP The Definitive Guide 4.2.3 TCP Connection Handshake Delays When you set ...

  8. Myeclipse下配置struts2和hibernate

    最近维护一个项目,是用struts2做的,所以特意学了下struts的入门,否则代码都看不懂啊.下面记录下过程.Myeclipse 版本为2014.struts2,hibernate为4.1. 1.既 ...

  9. 经常会碰到css的bug

    1.a标签做为空的时候,只做链接的时候,ie是无法点击链接. a{background:url(about:blank);} ;filter:alpha(opacity=0);} 2.给导航做下拉菜单 ...

  10. lowB三人组算法-冒泡排序-选择排序-插入排序

    冒泡排序 时间复杂度:O(n2)  算法稳定 第一趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到最后位置得出一个第一大数 第二趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到倒数 ...