STM32的CRC計算
阿新 • • 發佈:2019-02-12
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傳輸
期間保持為低。
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傳輸
期間保持為低。