//-------------------------------------------------------------------------------
// Подсчет CRC32 как в STM32 по умолчанию. (CRC32_POLY 0x04C11DB7) ???
static const uint32_t Crc32Table[] = {
0x00000000,0x04C11DB7,0x09823B6E,0x0D4326D9, 0x130476DC,0x17C56B6B,0x1A864DB2,0x1E475005,
0x2608EDB8,0x22C9F00F,0x2F8AD6D6,0x2B4BCB61, 0x350C9B64,0x31CD86D3,0x3C8EA00A,0x384FBDBD
};
uint32_t DR;	// (Data Register) Так в STM32 называется аппаратный регистр CRC
void crc32_ini(void) {DR = 0xFFFFFFFF;}
void crc32_upd(uint32_t data) {
	DR = DR ^ data;
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
 	DR = (DR << 4) ^ Crc32Table[DR >> 28];
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
	DR = (DR << 4) ^ Crc32Table[DR >> 28];
}
uint32_t crc32_get(void) {return DR;}
uint32_t crc32_calc(uint32_t *pData, int size) {
	crc32_ini();
	while(size > 0) {
		crc32_upd(*pData++); 
		size -= 4;
	}
	uint32_t crc32 = crc32_get();
	return crc32;
}
//-------------------------------------------------------------------------------