STM32 CRC32与对应的软件CRC32
扫描二维码
随时随地手机看文章
简单实现STM32 CRC32使用
使用前记得使能STM32 CRC时钟
//STM32硬件CRC32byte数据计算,将数据移到最高位,低位补上FF
u32stm32_crc32_byte(u8*pBuff,u32len)
{
u32i;
u8buff[4];
u32*p32=(u32*)buff;
CRC->CR=1;//复位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数据计算 u32stm32_crc32(u32*pBuff,u32len) { u32i; CRC->CR=1;//复位CRC寄存器 for(i=0;i { CRC->DR=pBuff[i]; } returnCRC->DR; } //软件CRC32u32数据计算 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数据计算,将数据移到最高位,低位补上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; }