1、简介
CRC(循环冗余校验)是一种常用的数据校验方式,用于检测数据在传输或存储过程中是否发生了错误。它通过特定的算法对原始数据进行计算,生成一个短的校验值(称为CRC码),发送方在传输数据时附带这个校验值,接收方收到数据后也进行相同的计算,并将结果与接收到的CRC码进行比较,从而判断数据是否完整可靠。CRC算法运算速度快、实现简单,在通信、存储、网络等领域广泛应用。
2、CRC实现方式
CRC可以有软件实现,也可以是使用专门硬件CRC单元完成crc运算,以下使用STM32主控内置的crc外设进行实验
2.1 cubemx使能crc

2.2、crc初始化及运行
crc计算示例数据
const uint32_t crc_array[4] =
{
0x00001021, 0x20423063, 0x408450a5, 0x60c670e7
};
uint32_t crc_result;
uint32_t crc_result_correct = 0xa4499587;执行crc计算
/* USER CODE BEGIN 2 */
crc_result = HAL_CRC_Accumulate(&hcrc, (uint32_t *)crc_array, BUFFER_SIZE);
if (crc_result != crc_result_correct)
{
printf("CRC Error!\n");
printf("32-bit CRC Value:0x%x\n",crc_result);
}
else
{
printf("CRC Correct!\n");
printf("32-bit CRC Value:0x%x\n",crc_result);
}
/* USER CODE END 2 */3、运行结果
![1744040706381875.png Y49S3_]WL33[1KBX[@FHAOP.png](http://uphotos.eepw.com.cn/1709346044/pics/1744040706381875.png)
将crc_array元素任意变动一个,可以看到crc计算结果发生变动
const uint32_t crc_array[4] =
{
0x00001021, 0x20423063, 0x408450a5, 0x60c670e7+1
};
可以得出结论,当数据通信中出现了数据丢失、数据异常变动,接收端计算的crc就会与数据本身的crc固定端不匹配,此时接收端认为本次接收数据不可靠
我要赚赏金
