日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 1、CRC計(jì)算公式 所有的STM32芯片都內(nèi)置了一個(gè)硬件的CRC計(jì)算模塊,可應(yīng)用到通信程序中,這個(gè)CRC計(jì)算模塊使用常見的、在以太網(wǎng)中使用的計(jì)算多項(xiàng)式:X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 +

1、CRC計(jì)算公式
所有的STM32芯片都內(nèi)置了一個(gè)硬件的CRC計(jì)算模塊,可應(yīng)用到通信程序中,這個(gè)CRC計(jì)算模塊使用常見的、在以太網(wǎng)中使用的計(jì)算多項(xiàng)式:
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1
寫成16進(jìn)制就是:0x04C11DB7
2、使用這個(gè)內(nèi)置CRC模塊操作步驟:
復(fù)位CRC模塊(設(shè)置CRC_CR=0x01),這個(gè)操作把CRC計(jì)算的余數(shù)初始化為0xFFFFFFFF
把要計(jì)算的數(shù)據(jù)按每32位分割為一組數(shù)據(jù)字,并逐個(gè)地把這組數(shù)據(jù)字寫入CRC_DR寄存器(既下圖中的綠色框)
寫完所有的數(shù)據(jù)字后,就可以從CRC_DR寄存器(既下圖中的蘭色框)讀出計(jì)算的結(jié)果。
注意:雖然讀寫操作都是針對CRC_DR寄存器,但實(shí)際上是訪問的不同物理寄存器。
3、C語言描述的這個(gè)計(jì)算模塊算法??煞旁谕ㄐ诺牧硪欢?,對通信的正確性進(jìn)行驗(yàn)證:
DWORD dwPolynomial = 0x04c11db7;
DWORD cal_crc(DWORD *ptr, int len)
{
DWORD xbit;
DWORD data;
DWORD CRC = 0xFFFFFFFF; // init
while (len--)
{
xbit = 1 << 31;
data = *ptr++;
for (int bits = 0; bits < 32; bits++)
{
if (CRC & 0x80000000)
{
CRC <<= 1;
CRC ^= dwPolynomial;
}else
CRC <<= 1;
if (data & xbit)
CRC ^= dwPolynomial;
xbit >>= 1;
}
}
return CRC;
}
注意:
1)、上述算法中變量CRC,在每次循環(huán)結(jié)束包含了計(jì)算的余數(shù),它始終是向左移位(既從最低位向最高位移動(dòng)),溢出的數(shù)據(jù)位被丟棄。
2)、輸入的數(shù)據(jù)始終是以32位為單位,如果原始數(shù)據(jù)少于32位,需要在低位補(bǔ)0,當(dāng)然也可以高位補(bǔ)0。
3)、假定輸入的DWORD數(shù)組中每個(gè)分量是按小端存儲(chǔ)。
4)、輸入數(shù)據(jù)是按照最高位最先計(jì)算,最低位最后計(jì)算的順序進(jìn)行。
例如:
如果輸入0x44434241,內(nèi)存中按字節(jié)存放的順序是:0x41, 0x42, 0x43, 0x44。計(jì)算的結(jié)果是:0xCF534AE1
如果輸入0x41424344,內(nèi)存中按字節(jié)存放的順序是:0x44, 0x43, 0x42, 0x41。計(jì)算的結(jié)果是:0xABCF9A63

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉