回覆列表
  • 1 # 藍風24

    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傳輸

    期間保持為低。

  • 中秋節和大豐收的關聯?
  • 現在的物價是個什麼樣的水平?