2017-08-24 409 views
0

我試圖使用HAL_SPI_Transmit(。)進行16位數據傳輸。STM32 HAL SPI 16位發送

我已經使用STM32Cube作爲16位的數據大小

(與hspi2.Init.DataSize = SPI_DATASIZE_16BIT)上配置的SPI。

我試圖在16位與發送數據:

uint16_t DataToSend[10]={...}; 

HAL_SPI_Transmit(&hspi2,DataToSend, 2,TIMEOUTSPI); 

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)專門爲uint8_t *需求,並返回以下錯誤的功能:

error: #167: argument of type "uint16_t *" is incompatible with parameter of type "uint8_t *"

因此,如何能我使用HAL_SPI_Transmit()發送16位數據?

我發現這個link但只討論了該錯誤,並沒有討論使用該函數的方式。所以我的問題依舊。

我搜查了網沒有任何運氣。 我對STM32相當陌生,因此對您來說答案可能很明顯。

回答

0

要刪除的錯誤,寫:

HAL_SPI_Transmit(&hspi2,(uint8_t*)(DataToSend), 2,TIMEOUTSPI); 

我注意到,您的數組的大小爲10 uint16_t DataToSend[10](這是20個字節),也許你的意思是:

HAL_SPI_Transmit(&hspi2,(uint8_t*)(DataToSend), 20,TIMEOUTSPI); 

你不應該因爲您使用的是STM32F4系列,因此可以獲得鏈路中提到的對齊錯誤。

+0

我使用2作爲Size參數的原因是我想發送2個16位數據。我應該在這種情況下寫4嗎? @Guillaume – Alithewise

+0

我剛看了一下HAL代碼,看起來大小就是單詞的數量。所以看起來你是對的,應該是2(發送2個16位字) –

+0

感謝您的回答。我測試了它,它工作。但我認爲應該改變函數定義來支持16位數據而不用進行類型轉換。 – Alithewise