2017-08-24 90 views
0

16ビットデータ送信にHAL_SPI_Transmit(。)を使用しようとしています。STM32 HAL SPI 16ビット送信

Iは16ビット・データ・サイズ(hspi2.Init.DataSize = SPI_DATASIZE_16BIT有する)

としてSTM32Cubeを使用してSPIを設定しています。

私は16ビットのデータを送信しようとした:

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

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

しかしuint8_tのために特別に必要HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)機能*、それが次のエラーを返します。

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

それでは、どのようにすることができますHAL_SPI_Transmit()を使用して16ビットのデータを送信しますか?

私はこれを見つけましたが、バグだけが議論され、その機能を使用する方法ではありませんでした。だから私の質問は残っている。

私は運がないネットを検索しました。 私はむしろSTM32を初めて使っているので、答えはあなたには明らかです。

答えて

0

エラーを削除するには、書き込み:

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

は私が(20バイトである)あなたの配列のサイズが10 uint16_t DataToSend[10]であることに気づいた、多分あなたは意味:

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

あなたはいけませんSTM32F4ファミリを使用しているときと同じように、リンクに記載されている位置合わせエラーが発生します。

+0

サイズパラメータとして2を使用した理由は、2つの16ビットデータを送信したかったからです。私はその場合4を書くべきですか? @Guillaume – Alithewise

+0

私はちょうどHALコードを見てきました、そして、サイズが言葉の数であるように見えます。だからそれはあなたが正しいと思われる、それは2(2 16ビットの単語を送信する)でなければなりません –

+0

あなたの答えをありがとう。私はそれをテストし、それは働いた。しかし、私は関数の定義をタイプ変換なしの16ビットデータをサポートするように変更する必要があると思います。 – Alithewise

関連する問題