STM32CubeMX配置硬件CRC(CRC-16/MODBUS)检验

MCU型号:STM32F301K8U6

STM32CubeMX版本:6.12.1

一、CubeMX配置

1.默认配置

硬件CRC默认使用格式为CRC-32

2.修改配置

其中的CRC Generating Polynomial无法修改,需要生成后在程序中手动修改!

二、程序修改

1.参数修改

生成多项式和初始值根据自己需要的校验形式修改,CRC16可参照下表

更多校验格式可通过在线校验工具查看

我用的是这个:CRC(循环冗余校验)在线计算_ip33.com

2.数据校验

uint8_t tbufCrc[8] = {1,2,3,4,5,6,7,8};
uint16_t recRcr;

recRcr = HAL_CRC_Calculate(&hcrc,(uint32_t*)tbufCrc,8);

三、结果验证

四、绑定资源

本文章所绑定的资源的MCU型号为STM32F103C8t6,CRC校验无法设置,原因如下:

STM32F301K8U6参考手册如下

STM32F103C8t6参考手册如下

其多项式不可编程!无CRC_POL寄存器!

### STM32CubeMX配置和使用 CRC 外设教程 在嵌入式开发中,循环冗余校验 (Cyclic Redundancy Check, CRC) 是一种用于检测数据传输错误的技术。STM32 微控制器系列提供了硬件支持的 CRC 计算单元,可以显著提高性能并减少软件开销。 以下是关于如何在 STM32CubeMX 工具中配置和使用 CRC 功能的具体说明: #### 配置 CRC 外设 1. **启动 STM32CubeMX 并创建项目** 打开 STM32CubeMX 软件,选择目标微控制器型号,并初始化一个新的工程文件[^1]。 2. **启用 CRC 外设** 在 Pinout & Configuration 页面上找到 Peripherals 列表中的 `CRC` 选项,并将其状态设置为 `Enabled` 或者根据需求调整到其他模式(如 Clock Enable/Disable)。这一步会自动将 RCC 寄存器配置好以供后续操作所需资源分配完成初始设定过程。 3. **生成代码框架** 完成上述配置之后点击 Generate Code 按钮让工具自动生成对应驱动程序及相关初始化函数调用模板以便于进一步定制化实现具体应用逻辑处理流程。 #### 编写应用程序来利用 CRC 单元计算值 下面展示了一个简单的例子演示怎样通过 HAL 库接口访问已开启好的外设来进行字节流或者多字组形式的数据块检验码运算: ```c #include "stm32f4xx_hal.h" uint32_t Calculate_CRC(uint8_t *pData, uint16_t DataLength){ CRC_HandleTypeDef hcrc; /* 初始化 CRC 控制结构体 */ hcrc.Instance = CRC; if(HAL_CRC_Init(&hcrc)!=HAL_OK){ Error_Handler(); // 错误处理器定义由用户自行决定 } /* 返回基于输入缓冲区的内容所得到的结果 */ return HAL_CRC_Calculate(&hcrc,(uint32_t*) pData ,DataLength>>2); } int main(void){ uint8_t data[]="Test String"; uint32_t crcValue=0; /* MCU Initialization code here */ /* 获取字符串对应的 CRC 值 */ crcValue = Calculate_CRC(data,sizeof(data)-1); while(1){ ; } } ``` 此示例展示了如何借助 HAL 层 API 函数轻松地获取任意长度字符数组关联起来的一个唯一标识数值作为其完整性验证依据之一[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值