【官方原创】LAT1709STM32C5硬件CRC值的计算话题

1.前言

有客户反馈,在使用STM32C5的硬件CRC时,在配置的多项式、初始值等参数完全相同的 条件下C5的计算结果和其他系列(如STM32H5)的结果不相同。


2.复现问题

直接对比H5(STM32Cube_FW_H5_V1.6.0\Projects\NUCLEO-H563ZI \Examples\CRC\ CRC_UserDefinedPolynomial)和C5(STM32C5-MCU-HAL2.0.0 \examples\hal\crc\ user_defined_polynomial )的官方例程,发现在硬件配置完全相同,计算原始数据也相同的条 件下,最终预期的CRC计算结果确实不同。数据都是0x1234 (32-bit),CRC的值一个是0xEF (H5),另一个是0x98(C5)。也就是说H5和C5的CRC计算结果确有不同。


3.原因分析

通过调试代码分析,C5的API(HAL2)在向DR寄存器写入数据前,做了一次__REV操作 (__REV 是 ARM/CMSIS 提供的一个内建函数(intrinsic),作用是把一个 32-bit 数据的字节顺 序反转),而H5的API并没有此操作。

因此我们猜测,由于HAL2中API的变动,导致32-bit 数据的四个字节序发生转换;通过去掉__REV,或者把要计算的原始数据高低字节调换改成0x34120000后,得到的CRC值就变成了 0xEF(和H5相同)。


4.如何配置

虽然我们找到了问题原因,但通过修改HAL2官方的驱动代码还是需要谨慎的。但通过软件把要计算CRC值的原始数据统一做一个大小端的转换,也十分消耗算力,尤其是数据量比较大的时候,也不太实际。

其实,在STM32C5的CRC_CR寄存器中增加一个RTYPE_IN位(相对于H5),当 RTYPE_IN位为1时,提供了输入数据字节或半字级别的硬件翻转功能。

通过RTYPE_IN和REV_IN1 :0组合,最终得到输入数据的6种翻转配置。通过STM32CubeMX2的配置界面来看,更加直观。

当选择Invert input data 为 Byte by word 时,会将每个32-bit字中的4个字节按相反顺序输入CRC计算单元。再次验证,得到的结果就和H5一致了。


5.总结

在使用STM32C5系列硬件CRC时,需特别注意与其他系列(如STM32H5)在数据输入处理上的差异。C5系列的HAL2驱动默认对输入数据进行了字节反转(__REV),而H5系列未做 此处理,导致相同配置下CRC结果不同。为保证与H5系列一致,可通过配置CRC_CR寄存器的 RTYPE_IN 位(如设置为"Byte by word"),实现硬件级别的数据字节翻转,无需额外的软件处理。这样既保证了结果一致性,也提升了效率。建议在项目开发中充分利用该硬件特性,避免手动修改驱动或进行软件端数据转换。

点击下载《LAT1709 STM32C5硬件CRC值的计算话题》原文档。


重要通知 - 请仔细阅读

意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

相关推荐
zhangrelay4 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
comyccccc4 小时前
STM32F103C8T6最小系统板设计全解析学习笔记
单片机·1024程序员节
Industio_触觉智能4 小时前
把NPU检测直接嵌进采集终端|RK3576 AI采集终端全链路拆解教程-下
嵌入式硬件·ai·硬件架构·npu·ai视觉·rk3576·采集终端
en.en..5 小时前
STM32 GPIO ODR 与 BSRR 寄存器完整对比详解
单片机·嵌入式硬件
HQB20268 小时前
EG1182|屹晶微电子 60V 内置高压管异步降压 DC‑DC
嵌入式硬件·硬件工程
LCG米9 小时前
STM32硬件SPI驱动SSD1306 OLED实测:上电黑屏排查、页寻址模式与取模扫描方向陷阱
stm32·单片机·嵌入式硬件·嵌入式
深圳老胡10 小时前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
qq_4017004110 小时前
100 个 IoT 小项目,给 ESP32 入门补上实操
前端·网络·stm32
硅基造物主10 小时前
STM32 从 0 到 1 做智能家居(八):PWM 控制风扇、加热片与 SG90 窗帘
stm32·嵌入式硬件·智能家居·hal库·pwm
简单电磁炮10 小时前
关于adc采集
stm32·单片机