Stm32 替换现有库中包含的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

我正试图用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_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