Die STM32G4 (und viele Andere) MCUs haben eine CRC-Einheit mit der man in Hardware CRC32 berechnen.

Her kommt es jedoch auf die richtige Einstellung an:

stm32g4 crc

Mit diesen Einstellungen nutzt die MCU 0x04C11DB7 als Polynom und 0xFFFFFFFF als initialen Wert für die Berechnung.

Die eigentliche Berechnung erfolgt mit dieser Funktion:

uint32_t CalcCRC32(uint32_t* pBuffer, uint32_t BufferLength)
{
	return (~HAL_CRC_Calculate(&hcrc, (uint32_t *)pBuffer, BufferLength));
}

WICHTIG: Das "~" vorm HAL.... ist wichtig! Die HAL-Funktion von ST invertiert die Bytes nicht, das muss nachträglich gemacht werden

Und so sieht der Aufruf aus:

uint32_t CalcCRC32(uint32_t* pBuffer, uint32_t BufferLength)
{
	uint8_t str[] = "Hallo Welt!";
	uint32_t crc = CalcCRC32((uint32_t*) &str, sizeof(str));
}