将 12字节的ID 通过 CRC-32 转换为 32位ID实现方法(GD32 示例)

[复制链接]
duo点 发表于 2025-8-13 15:15 | 显示全部楼层 |阅读模式
方法 1:使用硬件 CRC 模块(推荐)
c
#include "gd32f30x.h"

uint32_t calculate_crc32(uint8_t *data, uint32_t length) {
    // 复位 CRC 计算单元
    CRC_CTL = CRC_CTL_RST;
   
    // 逐字节输入数据
    for (uint32_t i = 0; i < length; i++) {
        CRC_DATA = data[i];
    }
   
    // 返回 32 位 CRC 结果
    return CRC_FDATA;
}

int main() {
    uint8_t id[12] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78};
    uint32_t crc32_id = calculate_crc32(id, 12);
   
    while (1);
}
方法 2:软件 CRC-32 计算(无硬件支持时)
c
#include <stdint.h>

uint32_t crc32(const uint8_t *data, uint32_t length) {
    uint32_t crc = 0xFFFFFFFF;
    for (uint32_t i = 0; i < length; i++) {
        crc ^= data[i];
        for (uint8_t bit = 0; bit < 8; bit++) {
            if (crc & 1) {
                crc = (crc >> 1) ^ 0xEDB88320; // 标准 CRC-32 多项式
            } else {
                crc >>= 1;
            }
        }
    }
    return ~crc;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

498

主题

2088

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

498

主题

2088

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部