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:
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));
}