匹配 STM32F0 和 zlib 中的 CRC32

2023-12-10

我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路。我想对我的数据包使用某种错误检测,并且由于 STM32F0 有 CRC32 硬件,并且我在 Linux 上有带有 CRC32 的 zlib,所以我认为在我的项目中使用 CRC32 是个好主意。问题是我不会在不同平台上为相同的数据获得相同的 CRC 值。

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>

int
main(void)
{
  uint8_t byte0 = 0x00;
  uint32_t crc0 = crc32(0L, Z_NULL, 0);
  crc0 = crc32(crc0, &byte0, 1);
  printf("CRC32 value of %" PRIu8 " is: %08" PRIx32 "\n", byte0, crc0);
}

outputs CRC32 value of 0 is: d202ef8d这与几个在线计算器的结果相匹配。

似乎无论我在 STM32 上使用什么设置,我都无法获得相同的 CRC。 我找到了关于 CRC hw 如何计算其值的流程图ST 的应用说明中但我不知道它是如何在 zlib 中完成的。

有谁知道它们是否兼容?

[编辑 1] 它们都使用相同的初始值和多项式。

[编辑 2] STM32 代码相对无趣,因为它使用 hw.

...
/* Default values are used for init value and polynomial, see edit 1 */
CRC->CR |= CRC_CR_RESET;
CRC->DR = (uint8_t)0x00;
uint32_t crc = CRC->DR;
...

STM32Fx 上的 CRC32 实现似乎不是您在许多在线 CRC 计算器和 zip 中找到的标准 CRC32 实现。

STM32 实现的 CRC32-MPEG2 使用大端且无最终翻转掩码,而 zip CRC32 使用小端和最终翻转掩码。

I found this支持CRC32-MPEG2的在线计算器。

如果您对其他 CRC 算法及其实现更感兴趣,请查看此link.

PS:STM 的 HAL 驱动程序支持字节、半字和字格式的输入,并且它们似乎适用于 v1.3.1 中的 STM32F0x

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匹配 STM32F0 和 zlib 中的 CRC32 的相关文章

随机推荐

  • 如何检查Flutter应用程序是否在前台?

    我不想当应用程序位于前台时显示通知 如何检查我的应用程序的实时状态 在您的 State 类中 您需要实现WidgetsBindingObserver接口并监听小部件状态变化 像这样的事情 class MyHomePageState exte
  • @Autowire 因 @Repository 失败

    我无法使 Autowire 注释与 Repository 注释的类一起使用 我有一个界面 public interface AccountRepository public Account findByUsername String use
  • EditText.getText().toString() 崩溃

    在我的 android 应用程序中 我有 3 个对话框 用户将信息放入 3 个 editText 中 在随机选择要选择的数据后 它会将其中一个数据显示到另一个类 页面上 这是我的主要课程 public class MainActivity
  • 与 Hibernate 的只读数据库连接

    是否可以使用 Hibernate 并通过只读连接连接到数据库 我将从事一个项目 该项目需要连接到现有数据库 从中提取数据 并在应用程序中进行一些复杂的数据操作 在整个过程中 我无法更改数据库中的任何内容 因此需要只读连接 我的第一个想法是使
  • GXT 当过滤器从网格中删除时如何刷新本地数据集?

    我有一个带有一组列和过滤器的本地网格 当我指定过滤条件 通过标题下拉菜单 时 显示的行是整个商店的子集 当我删除过滤器时 标题下拉菜单会正确更新以忽略条件对话框 但显示的行并未经过过滤 删除过滤器后如何触发重新计算 就这么简单 public
  • 如何在加载前获取 Iframe 事件?

    在我的网站中 我在 iframeB 中使用 iframeA 并且当 iframeA 更改其内容时 我必须设置 src 我只能使用 onload 事件来设置它 但这会在加载站点时调用 我正在寻找一些事件或触发器 这可以帮助我在开始加载之前检测
  • 从 Excel 表数组中提取字母等级

    我想知道是否有一种更简单的方法可以从数组中提取字母等级 而不是我当前使用的一堆嵌套 If 语句的方法 我的想法是如果 GPA G1 G5 介于 B1 C12 之间 则返回 A1 A12 图 1 显示原始数据 图 2 是所需输出 这是原始数据
  • AWS RDS 和 pgAdmin4:无法连接到服务器:无法连接到服务器:连接超时

    我试图直接从 pgAdmin4 操作数据库 但无法连接 我检查和做的是 我阅读了这篇文档并遵循https docs aws amazon com AmazonRDS latest UserGuide USER ConnectToPostgr
  • 如何使用 Python 从 NetworkX 中的特定节点属性获取值

    我正在开展一个小组项目 我们需要创建我们正在处理的图表中特定节点属性的所有值的列表 每个节点有 6 个属性 我们只需要一个属性的所有值的列表 import networkx as nx import scipy as sp import m
  • 有没有办法内联调用 XSLT 模板

    如何内联调用 XSLT 模板 例如 代替
  • Android 应用内计费:自定义 sku 购买给出“错误 - 未找到项目”

    我正在尝试使用我自己的 sku 产品 ID upgrade to premium 测试应用内计费 正如我在这里看到的推荐 我正在使用 Dungeons 示例应用程序 我已将 new CatalogEntry upgrade to premi
  • 非类右值始终具有 cv 未限定的类型

    3 10 第 9 节说 非类右值总是具有 cv 不合格的类型 这让我想知道 int foo return 5 const int bar return 5 void pass int int i std cout lt lt rvalue
  • 线程 QueueManagerThread 中的异常 - scikit-learn

    当我设置n 职位 1如果我将 n jobs 设置为相等 则会出现错误大价值 n jobs 100 但如果设置较小的值 例如n jobs 32 它可以正常工作 我试过了重新安装scikit learn 和 joblib 包 但无济于事 另外
  • 如何在 .net 中获取对 Internet Explorer 窗口句柄的引用

    基本上 我试图获取我在 C 中自动化的 Internet Explorer 实例的 HWND SHDocVw InternetExplorer IE new SHDocVw InternetExplorer IE AddressBar fa
  • 如何在android中使用相机拍摄多张图像

    我需要一台可以一次拍摄多张照片然后选择一张的相机 其他内容可能会也可能不会存储在设备上 我试过了this 我可以拍摄多张图像 但如何选择一张图像并在我的应用程序中使用它 我阅读了与camera2相关的文档 但如果没有任何实际示例 它很难理解
  • 使用rbindlist时如何按一组数据添加索引?

    我有几个具有相同结构的不同 csv 文件 我使用 fread 将它们读入 R 然后使用它们将它们合并成一个更大的数据集rbindlist files lt list files pattern csv x2csv lt rbindlist
  • 根据我的轨迹详细信息追踪距离和时间

    我正在android中进行gps跟踪来跟踪用户位置并提供记录轨迹的功能 我现在能够绘制路径 我想用它来计算轨迹距离和时间 就像假设用户开始跟踪记录并移动到另一个位置现在我想计算谷歌地图中从开始到结束位置 用户位置更新 的总距离和时间旅行 我
  • 删除死区或增加子图中图形的大小

    我在 matlab 中遇到问题 我输出一个图像 如示例所示 并通过打印命令保存它 我想要做的是以没有死空间的方式保存图像 即我想删除保存的图像中的空白 Example 黑色边框显示图像占用的总面积 这确实是一种空间浪费 我想删除这个 我想做
  • 配置持久性单元以在耳朵的多个罐子中可用

    在 ear 文件中 由于一些技术限制 我的 EJB 被复制到多个 jar 和 war 中 这些 jar 中只有一个包含 persistence xml 文件 我在其中配置了多个持久性单元 myear ear myjar1 jar META
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用