当前位置:首页 > 单片机 > 单片机
[导读]简单实现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使用

使用前记得使能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;

}



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭