IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章) -> 正文阅读

[嵌入式]M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)

前言

GD32L233支持硬件CRC,超赞。

跟GD32F450相比,它可以支持计算7/8/16/32位的CRC校验码,而不仅仅是32位的校验码。

这有什么好处呢?

懂CRC的都知道,0x34和0x00000034的校验码是不一样的,这不仅仅是计算结果不一样,计算复杂度也不是一个等级的。

e2170895339b12d4a929336c3eb663df.png
0x34和0x00000034的CRC32计算过程

据说能看懂这个图的年薪只能到百万,-_-

我曾经写过一篇解释CRC的文章,可以围观一把:史上解释CRC最清楚的文章

在线CRC网址:在线CRC[1]


GD32L233的CRC是CRC32。

  • 对应的标准是:CRC32/MPEG-2

  • 多项式是:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1,即:0x04C11DB7

  • 初始值是:0xFFFFFFFF

  • 输入数据反转:false

  • 输出数据反转:false

  • 结果异或值是:0x00000000

这个在官方的用户手册上没有写,建议官方把它加上去。

代码

由于GD32L233的支持不同位的CRC码,所以它的接口不一样:

uint32_t?crc_single_data_calculate(uint32_t?sdata,?uint8_t?data_format)

GD32F450是:

uint32_t?crc_single_data_calculate(uint32_t?sdata)

需要注意的是:

每次计算完crc后需要调用crc_data_register_reset复位寄存器。

测试过程比较简单:

static?void?crc_test(void)
{
#ifdef?CRC_TEST
????uint32_t?data?=?0xabcd1234;
#if?defined(GD32)?||?defined(STM32)
????uint32_t?crc_data?=?crc_single_data_calculate(data);
????crc_data_register_reset();
#endif
#if?defined(GD32M0)
????uint32_t?crc_data[3];
????crc_data[0]?=?crc_single_data_calculate(data,?INPUT_FORMAT_WORD);
????crc_data_register_reset();
????crc_data[1]?=?crc_single_data_calculate(data,?INPUT_FORMAT_HALFWORD);
????crc_data_register_reset();
????crc_data[2]?=?crc_single_data_calculate(data,?INPUT_FORMAT_BYTE);
????crc_data_register_reset();
#endif
#ifdef?STM32
????printf("STM32:?crc32?of?0x%X?=?0x%X\r\n",?data,?crc_data);
#endif
#if?defined(GD32)
????printf("GD32:?crc32?of?0x%X?=?0x%X\r\n",?data,?crc_data);
#endif
#if?defined(GD32M0)
????printf("GD32:?crc32?of?0x%X?=?[32]0x%X?[16]0x%X?[8]0x%X\r\n",?data,?crc_data[0],?crc_data[1],?crc_data[2]);
#endif
#endif
}

不同位数的计算结果对比:

数据CRC
34893EA4F8
123477227A2D
ABCD1234F7018A40
000000340032C637

测试结果

1秒打印一次。

ebf07e5a11c9528b5cfb018d5f3e13b6.gif
CRC测试结果
aaa88221498d136e8a8cd54ebae77219.gif ab5f86ffcde06e0e12a4863cf3eef2d8.png 46855393c2eb5f1b5ba72d6b22da013a.gif

参考资料

[1]

在线CRC: http://www.ip33.com/crc.html

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:46:36  更:2022-02-01 20:46:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:45:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码