簡單實現(xiàn)STM32 CRC32使用
使用前記得使能STM32 CRC時鐘
//STM32硬件CRC32byte數(shù)據(jù)計算,將數(shù)據(jù)移到最高位,低位補上FF
u32stm32_crc32_byte(u8*pBuff,u32len)
{
u32i;
u8buff[4];
u32*p32=(u32*)buff;
CRC->CR=1;//復(fù)位CRC寄存器
buff[0]=buff[1]=buff[2]=buff[3]=0XFF;
for(i=0;i { buff[3]=pBuff[i]; CRC->DR=*p32; } returnCRC->DR; } //STM32硬件CRC32u32數(shù)據(jù)計算 u32stm32_crc32(u32*pBuff,u32len) { u32i; CRC->CR=1;//復(fù)位CRC寄存器 for(i=0;i { CRC->DR=pBuff[i]; } returnCRC->DR; } //軟件CRC32u32數(shù)據(jù)計算 u32crc32(u32*ptr,u32len) { u32xbit; u32data; u32CRC32=0xFFFFFFFF; u32bits; constu32dwPolynomial=0x04c11db7; u32i; for(i=0;i { xbit=1<<31; data=ptr[i]; for(bits=0;bits<32;bits++) { if(CRC32&0x80000000){ CRC32<<=1; CRC32^=dwPolynomial; } else CRC32<<=1; if(data&xbit) CRC32^=dwPolynomial; xbit>>=1; } } returnCRC32; } //軟件CRC32byte數(shù)據(jù)計算,將數(shù)據(jù)移到最高位,低位補上FF u32crc32_byte(u8*ptr,u32len) { u32xbit; u32data; u32CRC32=0xFFFFFFFF;//初值 u32bits; u32i; u8buff[4]; u32*p32=(u32*)buff; constu32dwPolynomial=0x04c11db7; buff[0]=buff[1]=buff[2]=buff[3]=0XFF; for(i=0;i { xbit=1<<31; buff[3]=ptr[i]; data=*p32; for(bits=0;bits<32;bits++) { if(CRC32&0x80000000){ CRC32<<=1; CRC32^=dwPolynomial; } else CRC32<<=1; if(data&xbit) CRC32^=dwPolynomial; xbit>>=1; } } returnCRC32; }