STM32 關於HAL庫硬件SPI要注意的問題總結


        利用STM32CUbeMx編寫程序,大大方便了開發,最近做的項目利用到了

STM32CUbeMx的硬件SP,這里對SPI的使用做一個總結。

 

  HAL庫里的硬件SPI主要有以下幾個庫函數:

       /*  hspi1:spi1 硬件通道,temp_val:發送的數據,re_val:接收的數據,1:數據長度,1000:超時時間  */

  HAL_SPI_TransmitReceive(&hspi1,  &temp_val, &re_val, 1, 1000);   // 一邊接受一邊發送數據

  HAL_SPI_Transmit(&hspi1,&temp,sizeof(temp),10);  //發送數據

  HAL_SPI_Receive(&hspi1,&sc1161y_sel_re,sizeof(sc1161y_sel_re),10); //接收數據

  HAL_SPI_TransmitReceive_DMA();  //以DMA方式發送數據

  HAL_SPI_Receive_DMA();  //以DMA方式接收數據

  HAL_SPI_TransmitReceive_IT();  // 以中斷方式同時接收發送數據

  HAL_SPI_Transmit_IT();  // 以中斷方式發送數據

  HAL_SPI_Receive_IT();  // 以中斷方式接收數據

  具體使用哪個HAL庫函數看項目需求。

 

在使用硬件SPI過程中,會出現的問題可以總結為以下幾點:

  1.發送數據不成功;

  2.接收數據不成功;

  3.發送的數據有誤;

  4.接收的數據有誤;

  5.交互的數據一部分是對的,一部分有誤;

  6.SPI時鍾沒有啟動。

 

對於以上解決方法,我總結了一個自己調試時的方法:

  1. 先確認自己的SPI配置是否正確,是否滿足項目需求;

  2. 確認電路與通信IC無誤,注意信號線不要接錯;

  3. 重點:調節延時,第一第二步確認無誤后,很多時候不成功是由於延時原因造成的,

      主要是一個數據交互之間的延時,一幀數據發送后跟接收的延時,IC片選的延時,

   每個數據發送間的延時,IC與MCU交互間的延時。

 

補充:有時候發送出來的數據不對,有可能是分頻因子太小,配置的速度太快導致的,就例如發0x01,收到0x2c之類的;如果發送出來的數據多了幾個,可能就是發送數據長度設置不對造成的,例如發送0xaa、0xff 時發送出去多了0x20、0x00之類的,就要考慮是不是數據長度配置不對了,具體配置詳細說明如下圖:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM