ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
899018 Топик полностью
Aleksey_75 (25.01.2019 14:22, просмотров: 297) ответил 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>