CRC32 coincidente de STM32F0 y zlib

Estoy trabajando en un enlace de comunicación entre una computadora con Linux y un STM32F0. Quiero usar algún tipo de detección de errores para mis paquetes y dado que el STM32F0 tiene CRC32 hw y tengo zlib con CRC32 en Linux, pensé que sería una buena idea usar CRC32 para mi proyecto. El problema es que no obtendré el mismo valor CRC para los mismos datos en las diferentes plataformas.

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>

int
main(void)
{
  uint8_t byte0 = 0x00;
  uint32_t crc0 = crc32(0L, Z_NULL, 0);
  crc0 = crc32(crc0, &byte0, 1);
  printf("CRC32 value of %" PRIu8 " is: %08" PRIx32 "\n", byte0, crc0);
}

salidasCRC32 value of 0 is: d202ef8d que coincide con el resultado en varias calculadoras en línea.

Sin embargo, parece que cualquiera que sea la configuración que uso en el STM32 no puedo obtener el mismo CRC. He encontrado un diagrama de flujo sobre cómo el CRC hw calcula su valoren una nota de aplicación de ST pero no puedo entender cómo se hace en zlib.

¿Alguien sabe si son compatibles?

[editar 1] Ambos usan el mismo valor de inicio y polinomio.

[editar 2] El código STM32 es relativamente poco interesante ya que está utilizando el hw.

...
/* Default values are used for init value and polynomial, see edit 1 */
CRC->CR |= CRC_CR_RESET;
CRC->DR = (uint8_t)0x00;
uint32_t crc = CRC->DR;
...

Respuestas a la pregunta(5)

Su respuesta a la pregunta