我来说一说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位寄存器(可用于临时存储)
有关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为数据
|