这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32 F4】硬件CRC外设使用

共1条 1/1 1 跳转至

【STM32 F4】硬件CRC外设使用

助工
2025-04-07 23:50:22     打赏

1、简介

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

2、CRC实现方式

CRC可以有软件实现,也可以是使用专门硬件CRC单元完成crc运算,以下使用STM32主控内置的crc外设进行实验

2.1 cubemx使能crc

S5P6QZZDDC3MMTD@D@W5(G2.png

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、运行结果

Y49S3_]WL33[1KBX[@FHAOP.png

将crc_array元素任意变动一个,可以看到crc计算结果发生变动

const uint32_t crc_array[4] =
  {
    0x00001021, 0x20423063, 0x408450a5, 0x60c670e7+1
  };

H~7NUDBI)I7}HCP(V_$SA%R.png

可以得出结论,当数据通信中出现了数据丢失、数据异常变动,接收端计算的crc就会与数据本身的crc固定端不匹配,此时接收端认为本次接收数据不可靠




关键词: CRC计算    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]