STM32 CRC硬體單元

2021-09-24 01:40:02 字數 1315 閱讀 1629

stm32採用的crc校驗模組使用的校驗演算法與主流crc32校驗演算法不同。

主流32位校驗演算法包括crc-32 和 crc-32/mpeg-2兩種,而stm32採用的校驗演算法與這兩種都不同,儘管形式上很像crc-32/mpeg-2,但stm32是32為逐位計算的,而主流演算法都是按位元組計算的。

stm32crc權值為0x4c11db7,初始值為0xffffffff,,輸入值和輸出值不需要反轉,輸出值不需要異或運算,形式和 crc-32/mpeg-2相同,但計算結果卻不同。

以下為官方文件中給出的crc計算單元的c語言描述:

dword dwpolynomial= 0x04c11db7;

dword cal_crc(dword *ptr, int len)

else

crc <<= 1;

if (data & xbit)

crc ^= dwpolynomial;

xbit >>= 1;}}

return cr;

}

以下為c#中crc-32/mpeg-2演算法:

private uint32 crc32_mpeg_2(uint data, int length)

}return crc;

}

此**和上述**中crc-32/mpeg-2計算結果一致。

以下是筆者根據stm32官方crc單元c語言**更改的c#**:

uint32 cal_crc(byte ptr)

else

if ((data & xbit) != 0)

xbit >>= 1;}}

return crc;

}

計算結果和stm32計算結果一致。

stm32f10x、fl1x、f2x、f4x系列crc模組使用起來比較簡單,只需呼叫官方庫中的函式:

//使能crc模組時鐘

rcc_ahbperiphclockcmd(rcc_ahbperiph_crc, enable);

//復位crc暫存器為初始值

crc_resetdr();

//計算data32位陣列crc校驗值

crc1 = crc_calcblockcrc(data, length);

//計算乙個32為數的crc校驗值

x=crc_calccrc(data);

而stm32f0x、f30x、f37x系列比較複雜,可以更改crc校驗多項式。

筆者根據c#crc演算法和stm32f103硬體crc單元組成上位機和下位機通訊,校驗結果相同。

STM32 CRC32與對應的軟體CRC32

簡單實現stm32 crc32使用 使用前記得使能stm32 crc時鐘 stm32硬體crc32 byte資料計算,將資料移到最高位,低位補上ff u32 stm32 crc32 byte u8 pbuff,u32 len return crc dr stm32硬體crc32 u32資料計算 u3...

stm32硬體除錯

stm32的基本系統主要涉及下面幾個部分 一 電源 1 無論是否使用模擬部分和ad部分,mcu外圍出去vcc和gnd,vdda vssa vref 如果 封裝有該引腳 都必需要連線,不可懸空 2 對於每組對應的vdd和gnd都應至少放置乙個104的陶瓷電容用於濾波,並接該 電容應放置盡量靠近mcu ...

STM32硬體除錯詳解

stm32的基本系統主要涉及下面幾個部分 一 電源 1 無論是否使用模擬部分和ad部分,mcu外圍出去vcc和gnd,vdda vssa vref 如果封裝有該引腳 都必需要連線,不可懸空 2 對於每組對應的vdd和gnd都應至少放置乙個104的陶瓷電容用於濾波,並接該電容應放置盡量靠近mcu 3 ...