CRC是一种错误检测码,用于检测数据传输或存储中的意外更改。它通过对数据应用特定的算法生成一个固定长度的校验值。这个校验值附加在数据后面,接收方可以重新计算CRC并与接收到的校验值比较,以验证数据完整性。
示例代码(基于库函数)
#include "cw32f030_crc.h"
void CRC_Configuration(void) {
CRC_InitTypeDef CRC_InitStruct;
CRC_InitStruct.CRC_Poly = CRC_POLY_32; // CRC-32多项式
CRC_InitStruct.CRC_InitValue = 0xFFFFFFFF; // 初始值
CRC_InitStruct.CRC_InputReverse = CRC_REVERSE_BYTE; // 字节反转输入
CRC_InitStruct.CRC_OutputReverse = CRC_REVERSE_BIT; // 输出位反转
CRC_InitStruct.CRC_XorOut = 0xFFFFFFFF; // 结果异或值
CRC_Init(&CRC_InitStruct);
}
uint32_t Calculate_CRC(uint8_t *data, uint32_t len) {
CRC_Reset(); // 复位CRC计算器
while (len--) {
CRC_WriteData(*data++); // 逐字节写入数据
}
return CRC_ReadResult(); // 返回最终CRC值
}
int main() {
CRC_Configuration();
uint8_t test_data[] = "123456789";
uint32_t crc = Calculate_CRC(test_data, sizeof(test_data)-1); // 计算CRC
// 预期结果:0xCBF43926
while(1);
}
|