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与对应的软件CRC32(转)的更多相关文章
- U8g2图形库与STM32移植(I2C,软件与硬件)
U8g2图形库 简介 U8g2 是一个用于嵌入式设备的简易图形库,可以在多种 OLED 和 LCD 屏幕上,支持包括 SSD1306 等多种类型的底层驱动,并可以很方便地移植到 Arduino .树莓 ...
- STM32:获取复位源,软件复位
RCC CSR寄存器会存储复位标示,可通过它来知道复位原因,来源: if(RCC_GetFlagStatus(RCC_FLAG_PINRST)) printf("PINRST\r\n&quo ...
- CRC32
CRC32生成多项式:X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1 对应的16进制表示为:0x4C11DB7 下面贴CRC32查表法生成代码: ...
- 加密算法使用(一):用CRC32来压缩32uuid字符串
CRC32相比MD5重复率较高, 不过我们仍然可以使用CRC32然后转长整形的方式将32位的UUID字符串压缩成更短的整形唯一标识. /** * * @Title: getCRC32Value * @ ...
- boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET
boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET boost::crc_32_type crc32; crc32. ...
- boost计算随机数和计算crc32简单示例
boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET boost计算随机数和计算crc32简单示例 2013-02-18 17:14 10 ...
- STM32 mdk软件仿真时过不去时钟的问题
stm32的程序用MDK软件仿真时,由于系统时钟初始化函数里有个等待系统时钟准备好的循环,所以过不去. 设置方式如下:这么设置之后仿真时就可以直接进入main函数了.
- CRC-32 校验算法
crc32的头文件 ===========================分割线=========================== //crc32.h #ifndef _CRC32_H #de ...
- 数据安全之MD5、SHA-1、CRC32区别
crc32 — 计算一个字符串的 crc32 多项式 生成 string 参数的 32 位循环冗余校验码多项式……:这句话从英文翻译过来的,不正确,准确的说应该是这么理解: 以32位循环冗余校验多项式 ...
随机推荐
- Influxdb时序数据库阅读笔记
时序数据库 2017年2月Facebook开源了beringei时序数据库:到了4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了,而早在2016年7月,百度云在其天工物联网平 ...
- php实现简单的权限管理
今天主要来实现一个权限管理系统,它主要是为了给不同的用户设定不同的权限,从而实现不同权限的用户登录之后使用的功能不一样,首先先看下数据库 总共有5张表,qx_user,qx_rules和qx_jues ...
- kafka服务器搭建与测试
kafka服务器搭建 kafka自身集群信息的管理以及对producer和consumer的信息管理是通过zookeeper实现的,zookeepr是kafka不可分割的一部分,所以搭建zookeep ...
- 160519、Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Sh ...
- 20165330 2017-2018-2 《Java程序设计》第8周学习总结
课本知识总结 第十二章 Java多线程机制 Java中的线程 进程:是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过程 线程:一个进程在其执行过程中,可以产生多个线程,形成多条 ...
- 全球数字货币交易所TOP20安全性评级报告
链塔智库2018-05-03 10:28 分析师:常昊.王婧雯 来源: 链塔智库 全球加密数字货币市值超2.5万亿元,单日交易额超2000亿元,全球超过3000万人已投入加密数字货币领域. ...
- python基础-第五篇-5.4正则表达式
正则基础知识 正则表达式是通过调用re模块实现的 在python里,正则表达式处理对象为字符串,所以正则里方法和字符串的方法有很多相似的地方:re.findall和find,re.split和spli ...
- 剑指Offer——数据流中的中位数
题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. ...
- 剑指Offer——平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质 ...
- 【opencv】相机标定程序内存溢出
运行相机内参标定程序出现内存溢出的错误 opencv的alloc.cpp报cv::OutOfMemoryError 因为同时开了多个线程,每个线程标定一台相机,每个线程都会imread读入所有标定图片 ...