Aleksey_75 (25.01.2019 14:22, просмотров: 327) ответил Rainman62 на Верно. Я сейчас сам к ней пришел, потом загуглил. Но не помогло. Суть проблемы - нужно чисто программно вычислить CRC32 так же, как ее вычисляет CRC engine STM32. У меня что то не выходит. Поможете?
ваще не вопрос, ща ! Сам недавно втыкался/ UPD унутри <code>
//-------------------------------------------------------------------------------------------------
// Описание: функция подсчета CRC-32 по алгоритму аппаратного crc stm32
// Аргументы: const uint8_t * buf - указатель на массив данных, на который считается CRC
// uint32_t len - длина массива
// Возврат: посчитанная CRC-32
// Замечания:
//-------------------------------------------------------------------------------------------------
uint32_t sw_calc_crc32_as_stm32(uint32_t crc32, uint8_t * buf, size_t byte_len)
{
uint32_t last_data;
uint32_t dword_len = (byte_len >> 2);
uint32_t tail_byte_len = (byte_len & 3);
uint32_t i=0;
while(dword_len --)
{
crc32 = crc32 ^ *((uint32_t *)buf);
buf += 4;
for(i=0; i < 32; i++)
{
if (crc32 & 0x80000000)
crc32 = (crc32 << 1) ^ 0x04C11DB7;
else
crc32 = (crc32 << 1);
}
}
switch ( tail_byte_len )
{
case 0:
return crc32;
case 1:
last_data = buf[0] << 24;
break;
case 2:
last_data = *( (uint16_t *)(&buf[0]) );
last_data <<= 16;
break;
case 3:
last_data = *( (uint16_t *)(&buf[0]) );
last_data <<= 8;
last_data += buf[2]<<24;
break;
}
crc32 = sw_calc_crc32_as_stm32( crc32, (uint8_t *)&last_data, 4);
return crc32;
}
//=================================================================================================
</code>