1. 程式人生 > >STM32的CRC計算

STM32的CRC計算

 CRC計算 
CRC校驗僅用於保證全雙工通訊的可靠性。資料傳送和資料接收分別使用單獨的CRC計算器。
通過對每一個接收位進行可程式設計的多項式運算來計算CRC。CRC的計算是在由SPI_CR1暫存器
中CPHA和CPOL位定義的取樣時鐘邊沿進行的。 
注意:   該SPI介面提供了兩種CRC計算方法,取決於所選的傳送和/或接收的資料幀格式:8位資料幀採
用CR8;16位資料幀取樣CRC16-CCITT。 
CRC計算是通過設定SPI_CR1暫存器中的CRCEN位啟用的。設定CRCEN位時同時復位CRC寄
存器(SPI_RXCRCR和SPI_TXCRCR)。當設定了SPI_CR1的CRCNEXT位,SPI_TXCRCR的內
容將在當前位元組傳送之後發出。 
注意:   在傳輸SPI_TXCRCR的內容時,如果在移位暫存器中收到的數值與SPI_RXCRCR的內容不匹
配,則SPI_SR暫存器的CRCERR標誌位被置1。如果在TX緩衝器中還有資料,CRC的數值僅在
資料位元組傳輸結束後傳送。在傳輸CRC期間,CRC計算器關閉,暫存器的數值保持不變。 
注意:   請參考產品說明書,以確認有此功能(不是所有型號都有此功能)。 
SPI通訊可以通過以下步驟使用CRC: 
●  設定CPOL、CPHA、LSBFirst、BR、SSM、SSI和MSTR的值; 
●  在SPI_CRCPR暫存器輸入多項式; 
●  通過設定SPI_CR1暫存器CRCEN位使能CRC計算,該操作也會清除暫存器SPI_RXCRCR 
和SPI_TXCRC; 
●  設定SPI_CR1暫存器的SPE位啟動SPI功能; 
●  啟動通訊並且維持通訊,直到只剩最後一個位元組或者半字; 
●  當把最後一個位元組或半字寫進發送緩衝器,設定SPI_CR1的CRCNext位,指示硬體在最後
一個數據位元組傳送完成後,傳送CRC。在傳送CRC期間,CRC計算停止; 
●  當最後一個位元組或半字被髮送後,SPI傳送CRC,CRCNext位被清除。同樣,接收到的
CRC和SPI_RXCRCR值進行比較,如果比較不相配,SPI_SR上的CRCERR標誌被置位,
當設定了SPI_CR2暫存器的ERRIE時,則產生中斷。 
注意:   當SPI時鐘頻率較高時,使用者在傳送CRC時必須小心。因為在CRC傳輸期間,使用CPU的時間
應儘可能少。為了避免在接收最後的資料和CRC時出錯,在傳送CRC過程中應禁止函式呼叫。 
  當SPI時鐘頻率較高時,建議採用DMA模式以避免SPI速度效能的降低。 
  當STM32F10xxx配置為從模式並且使用了NSS硬體模式,NSS管腳應該在資料傳輸和CRC傳輸
期間保持為低。