[信息] 学习笔记+CRC校验单元

[复制链接]
1092|10
 楼主| tpgf 发表于 2019-12-23 15:06 | 显示全部楼层 |阅读模式
我来说一说F4系列的CRC校验单元,不知道是否stm32整个系列通用哈!
下文所有图片摘自**:RM0090_STM32F405/415, STM32F407/417, STM32F427/437和STM32F429/439单片机参考手册,亲们可以从官方网站下载。

CRC(循环冗余校验)计算单元用于从32位数据字和固定的生成多项式中获取CRC码。


CRC的主要特点有:
•使用CRC-32(以太网)多项式:0x4C11DB7
– X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X + 1
•单个输入/输出32位数据寄存器
•在4个AHB时钟周期(HCLK)中完成CRC计算
•通用8位寄存器(可用于临时存储)



662485e00669d78747.png

有关CRC的有关功能有下面的描述:

CRC计算单元主要由单个32位数据寄存器组成,该寄存器:
•用作在CRC计算器中输入新数据的输入寄存器(写入寄存器时)
•保留上一次CRC计算的结果(读取寄存器时)
对数据寄存器的每次写操作都会创建先前CRC值和新CRC值的组合(CRC计算是在整个32位数据字上完成的,而不是每个字节一个字节)。
写入操作将一直暂停直到CRC计算结束,从而允许进行背对背写入访问或连续的写入和读取访问。
可以使用CRC_CR寄存器中的RESET控制位将CRC计算器复位为0xFFFF FFFF。 该操作不会影响CRC_IDR寄存器的内容。



CRC计算单元包含两个数据寄存器和一个控制寄存器。
CRC寄存器必须通过字(32位)进行访问。



对于CRC的寄存器我这里就不详细贴图了,在这里附一下STM32F4的CRC库

void CRC_ResetDR(void)复位CRC数据寄存器
uint32_t CRC_CalcCRC(uint32_t Data)计算32位数的CRC
uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[],uint32_t BufferLength)计算多个32位数的CRC
uint32_t CRC_GetCRC(void)返回当前CRC数值
void CRC_SetIDRegister(uint8_t ID_Value)存入一个8位数据到独立寄存器
uint8_t CRC_GetIDRegister(void)从独立数据寄存器读出8为数据






labasi 发表于 2020-1-17 14:03 | 显示全部楼层
非常感谢楼主分享
paotangsan 发表于 2020-1-17 14:10 | 显示全部楼层
非常感谢楼主分享
renzheshengui 发表于 2020-1-17 14:17 | 显示全部楼层
非常感谢楼主分享
wakayi 发表于 2020-1-17 14:27 | 显示全部楼层
非常感谢楼主分享
wowu 发表于 2020-1-17 14:36 | 显示全部楼层
非常感谢楼主分享
xiaoqizi 发表于 2020-1-17 14:45 | 显示全部楼层
非常感谢楼主分享
operating 发表于 2020-1-17 15:05 | 显示全部楼层
感谢分享!CRC校验算是比较好而且常用的一种校验算法了
木木guainv 发表于 2020-1-17 15:06 | 显示全部楼层
非常感谢楼主分享
guanjiaer 发表于 2020-1-17 15:21 | 显示全部楼层
非常感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2384

主题

17635

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部