打印
[软件资料]

硬件循环冗余校验(CRC)模块

[复制链接]
458|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2025-5-15 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CRC是一种错误检测码,用于检测数据传输或存储中的意外更改。它通过对数据应用特定的算法生成一个固定长度的校验值。这个校验值附加在数据后面,接收方可以重新计算CRC并与接收到的校验值比较,以验证数据完整性。
示例代码(基于库函数)

#include "cw32f030_crc.h"

void CRC_Configuration(void) {
    CRC_InitTypeDef CRC_InitStruct;

    CRC_InitStruct.CRC_Poly = CRC_POLY_32;         // CRC-32多项式
    CRC_InitStruct.CRC_InitValue = 0xFFFFFFFF;     // 初始值
    CRC_InitStruct.CRC_InputReverse = CRC_REVERSE_BYTE; // 字节反转输入
    CRC_InitStruct.CRC_OutputReverse = CRC_REVERSE_BIT; // 输出位反转
    CRC_InitStruct.CRC_XorOut = 0xFFFFFFFF;        // 结果异或值
    CRC_Init(&CRC_InitStruct);
}

uint32_t Calculate_CRC(uint8_t *data, uint32_t len) {
    CRC_Reset(); // 复位CRC计算器
    while (len--) {
        CRC_WriteData(*data++); // 逐字节写入数据
    }
    return CRC_ReadResult(); // 返回最终CRC值
}

int main() {
    CRC_Configuration();
    uint8_t test_data[] = "123456789";
    uint32_t crc = Calculate_CRC(test_data, sizeof(test_data)-1); // 计算CRC
    // 预期结果:0xCBF43926
    while(1);
}

使用特权

评论回复
沙发
lidi911| | 2025-5-15 21:01 | 只看该作者
现在MCU一般都内置了硬件CRC

使用特权

评论回复
板凳
huquanz711| | 2025-5-17 14:58 | 只看该作者
硬件CRC比软件计算速率要快得多

使用特权

评论回复
评论
forgot 2025-5-19 09:30 回复TA
有的MCU没有硬件的 
地板
szt1993| | 2025-5-18 20:34 | 只看该作者
CRC是一种错误检测码

使用特权

评论回复
评论
forgot 2025-5-19 09:30 回复TA
保证正确率的 
5
Sunriver_Yao| | 2025-5-19 20:31 | 只看该作者
能算 ModBus CRC么?

使用特权

评论回复
6
zhouyong77| | 2025-5-20 07:53 | 只看该作者
这个硬件CRC可以选择计算方式嘛?

使用特权

评论回复
7
再见十分钟| | 2025-5-21 14:16 | 只看该作者
避免数据错误还是很有必要的

使用特权

评论回复
8
小小蚂蚁举千斤| | 2025-5-22 12:55 | 只看该作者
数据校验还是非常必要的

使用特权

评论回复
9
AdaMaYun| | 2025-5-22 17:35 | 只看该作者
CRC是一种错误检测码,用于检测数据传输或存储中的意外更改。

使用特权

评论回复
10
梦境摆渡人| | 2025-5-23 10:09 | 只看该作者
这个示例代码提供了一个基本的CRC计算流程,非常适用于嵌入式系统的数据校验。

使用特权

评论回复
11
复古留声机| | 2025-5-24 09:19 | 只看该作者
这个示例代码很好地展示了如何在硬件层面使用CRC校验。对于嵌入式系统来说,这种校验是非常重要的。

使用特权

评论回复
12
蚊子的噩梦| | 2025-5-24 22:56 | 只看该作者
这个示例代码非常实用,它展示了如何在硬件层面使用CRC来确保数据的完整性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1978

主题

14131

帖子

59

粉丝