STM32 CRC32与对应的软件CRC32 -
[导读]简单实现STM32 CRC32使用使用前记得使能STM32 CRC时钟//STM32硬件CRC32byte数据计算,将数据移到最高位,低位补上FFu32stm32_crc32_byte(u8*pBuff,u32len){u32i;u8buff[4];u32*p32=(u32*)buff;CRC->CR=1;//复位CRC寄存
简单实现STM32 CRC32使用
本文引用地址: http://www.21ic.com/app/mcu/201808/781715.htm
使用前记得使能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; }
查看评论 回复