源: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. SharedPreferences小技巧

    相信Android的这个最简单的存储方式大家都很熟悉了,但是有一个小小技巧,也许你没有用过,今天就跟大家分享一下,我们可以把SharedPreferences封装在一个工具类中,当我们需要写数据和读数 ...

  2. jquery做简单特效

    1.点击触发消失效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  3. fopen与读写的标识r,r+,rb+,rt+,w+.....

    FILE * fopen(const char * path,const char * mode); 参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存 ...

  4. 《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制

    原创文章,欢迎转载.转载请注明:关东升的博客 通知(Notification)机制是基于观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图 ...

  5. ajax跨域问题解决之cors篇

    现在浏览器出于安全考虑,在域名.协议.端口不同的情况下,浏览器会认为这是跨域,ajax请求是不允许跨域的. 如果我们有跨域的需求,可以使用cors解决.其原理就是,在请求之前先发送一个OPTIONS请 ...

  6. vscode中设置自动保存

  7. Uncaught TypeError: Cannot set property 'value' of null

    w拼写多一个空格导致. document.getElementById(winput_id).value = value; http://stackoverflow.com/questions/161 ...

  8. ui-router 视图嵌套时指定二级视图显示默认页面

    当跳转到user页面时,右边的uiview是为空的,要点击了左侧的导航才能插入模板,如何在路由中设置二级视图的默认显示页面呢? app.config(function($stateProvider, ...

  9. Mysql 多主一从数据备份

    Mysql 多主一从数据备份 概述 对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库中的数据一致. 这样做有如下几点好处: 可以做灾备,其中一个坏了可以切换到另一个. 可以做负载均 ...

  10. Yii2的主从数据库设置

    项目做大了,数据库主从还是不可少的.使用Yii框架开发,如何设置数据库的主从呢?其实很简单. 先说一个主数据库服务器和多个从数据库服务器的情况,修改配置文件 config/db.php ,其中 sla ...