登录/注册

STM32程序CRC

STM32程序CRC

更多

STM32的CRC(循环冗余校验)功能是一种硬件计算模块,用于验证数据的完整性。以下是关键点总结和代码示例:

核心要点

  1. 硬件加速
    STM32内置CRC计算单元,相比软件实现更快、更省资源。

  2. 配置差异
    不同STM32系列的默认CRC参数可能不同:

    • F1/F4系列:使用 CRC32 多项式 0x4C11DB7(IEEE 802.3标准)
    • L0/L4系列:使用 CRC-16-CCITT 多项式 0x1021
    • 使用前需查阅芯片手册确认参数。
  3. 常用函数(HAL库)

    HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength);

完整操作步骤(以STM32F4为例)

1. 初始化CRC外设

#include "stm32f4xx_hal.h"

CRC_HandleTypeDef hcrc;

void CRC_Init(void) {
  __HAL_RCC_CRC_CLK_ENABLE();             // 使能CRC时钟
  hcrc.Instance = CRC;                    // 使用硬件CRC
  hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
  hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE; // 初始值0xFFFFFFFF
  hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_WORDS;         // 32位输入
  HAL_CRC_Init(&hcrc);
}

2. 计算CRC值

uint32_t Calculate_CRC(uint32_t *data, uint32_t len) {
  // 复位CRC(可选,确保初始值)
  __HAL_CRC_DR_RESET(&hcrc);  

  // 计算并返回CRC结果
  return HAL_CRC_Calculate(&hcrc, data, len);
}

3. 使用示例

int main(void) {
  HAL_Init();
  CRC_Init();

  uint32_t testData[] = {0x12345678, 0x9ABCDEF0};
  uint32_t crcResult = Calculate_CRC(testData, 2); // 计算两个32位字的CRC

  while (1) {
    // 可通过调试器查看 crcResult
  }
}

注意事项

  1. 字节序问题
    若数据源是字节数组,需先转换为32位数组(对齐可能影响结果):

    uint8_t byteData[] = {0x01, 0x02, 0x03, 0x04};
    uint32_t *wordData = (uint32_t*)byteData;  // 强制类型转换
  2. 多项式自定义
    如需修改多项式(如F7系列支持),配置:

    hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
    hcrc.Init.GeneratingPolynomial = 0x1021;  // 自定义多项式
  3. 结果对比
    软件工具(如在线CRC计算器)的结果可能与STM32不同,原因:

    • 初始值不同(STM32默认0xFFFFFFFF)
    • 位序处理方式不同(STM32为LSB优先)

调试技巧

通过以上步骤,您可高效利用STM32的硬件CRC模块进行数据校验。

STM32F0 CRC计算单元介绍

继续,而不在应用程序中重新启动( 优先级更高的中断、多次CRC计算等)  每次 应用CRC重置,默认值为0xFFFF_FFFF以保持 与

2023-09-12 08:07:03

西门子200SMART PLC CRC校验程序的编写

“CRC校验程序”子程序,初始化存储器,并把16#FFFF装载到CRC寄

2023-07-10 15:45:34

再问STM32L4R5板子CRC程序的问题

我有一个STM32L4R5板子,有四个CRC例程,我搞好了三个。 还有一个CRC7。 代码如下: #include \"main.h\

2023-06-05 16:46:06

STM32 CRC使用详解

电子发烧友网站提供《STM32 CRC使用详解.pdf》资料免费下载

资料下载 乐侨珂 2023-09-19 14:58:51

关于STM32F4xx的硬件CRC32校验

关于STM32F4xx的硬件CRC32校验一、概述前段时间由于项目所需,要对MCU上某些数据进行CRC32校验,MCU选用的是

资料下载 敷衍作笑谈 2021-12-03 15:51:08

如何配置IAR的CRC参数(STM32)资料下载

电子发烧友网为你提供如何配置IAR的CRC参数(STM32)资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。

资料下载 李静 2021-04-07 08:54:28

16位CRC验证码生成VI工具下载

16位CRC验证码生成VI工具下载

资料下载 李健康 2021-03-22 10:40:52

如何使用SMART编写CRC的校验算法程序

本文档的主要内容详细介绍的是如何使用SMART编写CRC的校验算法程序。

资料下载 潘广 2019-10-24 08:00:00

STM32L4R5板子CRC程序的问题

代码: #include \"main.h\" /** @addtogroup STM32L4xx_HAL_Examples * @{ */ /** @addtogroup

2023-06-02 22:27:48

ST驱动程序仅支持CRC32算法吗?

;""但我没有看到它在 ST CRC 驱动程序(“stm32-crc32.c”)中使用 - Linux 5.10快速查看 S

2022-12-09 06:14:34

STM32系列MCU自带CRC与标准CRC存在差别

  STM32系列MCU自带CRC与标准CRC存在差别,大多情况下,应用程序

2021-08-11 08:49:29

STM32 硬件CRC和软件CRC速度谁快

一、测试条件硬件: STM32L432KC 主频: 80MHz 编译器: IAR 8.20.1 编译选项: High Speed no size constraints CRC 生成多项式

2021-08-11 06:35:24

单片机crc校验程序有什么作用

单片机crc校验程序,用于单片机的CRC检验方法一、应用场景二、代码实现1.CRC

2021-07-15 06:20:35

CRC原理应用及STM32硬件CRC外设

图说CRC原理应用及STM32硬件CRC外设

2021-01-22 07:07:29

CRC校验 、STM32CRC计算单元、 CRC应用

CRC校验、STM32中CRC计算单元、CRC应用

2020-03-04 13:54:44

7天热门专题 换一换
相关标签