Stm32 替换现有库中包含的CRC32的代码
我正试图用STM32L151连接CRC32。 我使用现有的库编写了代码。但我不想使用现有库中包含的CRC32代码。我想创造我自己的。如何从该代码派生正确的代码 我没有在数据表上查找CRC32计算。如果你知道如何计算,请告诉我Stm32 替换现有库中包含的CRC32的代码,stm32,crc32,Stm32,Crc32,我正试图用STM32L151连接CRC32。 我使用现有的库编写了代码。但我不想使用现有库中包含的CRC32代码。我想创造我自己的。如何从该代码派生正确的代码 我没有在数据表上查找CRC32计算。如果你知道如何计算,请告诉我 uint16_t Checksum(uint8_t *check_buffer, uint8_t buffer_legnth) { uint8_t i; uint16_t crc_result = 0; LL_CRC_ResetCRCCalculationUn
uint16_t Checksum(uint8_t *check_buffer, uint8_t buffer_legnth) {
uint8_t i;
uint16_t crc_result = 0;
LL_CRC_ResetCRCCalculationUnit(CRC);
for (i = 0; i < buffer_legnth; i++) {
LL_CRC_FeedData32(CRC, check_buffer[i]);
}
crc_result = (LL_CRC_ReadData32(CRC) & 0x0000FFFF);
// printf("CRC : %X \r\n", crc_result);
return crc_result;
}
union Crc_Data {
uint8_t Crc_Data_8[2];
uint16_t Crc_Data_16;
}
void main() {
union Crc_Data Crc_Data;
uint8_t test_packet[8] = {0x10, 0x20, 0x30, 0xB9, 0x53, 0x23, 0xA3};
Crc_Data.Crc_Data_16 = xcrc32((uint8_t *)&test_packet, 7);
printf("CRC = %02x %02x \r\n", Crc_Data.Crc_Data_8[0],
Crc_Data.Crc_Data_8[1]);
}
uint16校验和(uint8校验缓冲区,uint8校验缓冲区){
uint8_t i;
uint16\u t crc\u结果=0;
LL_CRC_ResetCRC计算单元(CRC);
对于(i=0;i
您为什么不想使用该库?是否要使用硬件CRC?没有足够的代码可以确定,但根据问题中包含的内容,代码似乎正在使用crc32代码生成crc16。基于crc_结果=&0x0000FFFF),它似乎是位反射crc。因此,使用的多项式是16位而不是32位,并且假设它是一个反射crc,16位多项式将位于crc32函数使用的多项式的较低32位。如果这是一个非反射crc,那么16位多项式将位于32位多项式的上16位,crc_结果=…>>16