#include "gd32f30x_crc.h"
void crc32_hw_init(void)
{
// 开启CRC时钟
rcu_periph_clock_enable(RCU_CRC);
// 复位并初始化CRC控制器
crc_reset();
// 根据需要配置CRC多项式,GD32F303默认支持多项式0x04C11DB7 (CRC-32/ISO-HDLC)
// 注意:大部分情况下不需要手动配置多项式,除非你需要使用非标准算法
}
uint32_t calculate_crc32(const uint8_t *data, uint32_t length)
{
// 计算数据的CRC32校验值
uint32_t crc_value = 0;
// 确保CRC模块处于待处理状态
crc_enable();
// 逐个字节或按需分块处理数据,更新CRC值
for(uint32_t i = 0; i < length; i++)
{
crc_value = crc_data_byte(crc_value, data[i]);
}
// 关闭CRC模块(如果不再需要连续计算)
// crc_disable();
return crc_value;
} |