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);
- }
|