STM32F0系列Hal庫SPI庫BUG

  在使用STM32Cube_FW_F0_V1.8.0版本的HAL庫時,應用中需要使用SPI總線,兩片STM32F03x系列微控制器分別作爲主機和從機使用。並且爲了提高通訊效率和通訊可靠性,通訊時使用DMA交互數據並使能SPI控制器自帶的CRC校驗功能。在實際使用時發生以下問題:當從機使用循環DMA模式時,從機接收到的數據會錯位。但是關閉CRC校驗功能後,從機緩衝區接收到的數據就不會發生錯位了。考慮原因是CRC校驗位長度處理異常導致的。從機在實際使用過程中調用瞭如下函數:

HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,

 uint16_t Size)

  此函數是使用DMA交互SPI數據,從機DMA的收發通道採用DMA_CIRCULAR模式,從機僅在初始化時調用一次該函數,以後不需要重複調用,因爲DMA控制器會自動循環內存地址。

  由於關閉CRC校驗功能後數據錯位的現象消失,所以考慮從CRC校驗的設置方面解決。參考STM32F0xx系列參考指南,在SPI控制器的章節找到如下說明:



  可以看出,在使能CRC校驗時,DMA通道的長度設置是有變化的。

  ST的庫中長度設置如下,並沒有針對CRC功能設置額外長度。


  現在按下圖修改:


  修改後數據DMA數據和CRC校驗功能均正常,數據不再順序錯亂。

  關於此BUG,沒有找到ST官方的BUG報告email,所以發佈博文以供網友參考。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章