2017-08-24 17 views
0

J'essaie d'utiliser HAL_SPI_Transmit (.) Pour la transmission de données 16 bits.STM32 HAL SPI 16 bits Transmettre

j'ai configuré le SPI en utilisant STM32Cube que la taille de données de 16 bits

(avec hspi2.Init.DataSize = SPI_DATASIZE_16BIT).

J'ai essayé d'envoyer des données en 16 bits avec:

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

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

Mais la fonction HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) a besoin spécifiquement pour uint8_t *, et il renvoie l'erreur suivante:

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

Alors, comment pouvez Je envoie des données 16 bits en utilisant HAL_SPI_Transmit()?

J'ai trouvé ce link mais seul le bug a été discuté et non la façon d'utiliser la fonction. Donc ma question reste.

J'ai cherché le net sans n'importe quelle chance. Je suis plutôt nouveau à STM32 donc la réponse peut être évidente pour vous.

Répondre

0

Pour supprimer l'erreur, écrire:

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

je remarquai que la taille de votre tableau est 10 uint16_t DataToSend[10] (qui est de 20 octets), peut-être que vous vouliez dire:

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

Vous ne devriez pas obtenez l'erreur d'alignement mentionnée dans votre lien, car vous utilisez la famille STM32F4.

+0

La raison pour laquelle j'ai utilisé le paramètre 2 en tant que taille est que je voulais envoyer 2 données de 16 bits. Dois-je écrire 4 dans ce cas? @Guillaume – Alithewise

+0

Je viens de jeter un oeil au code HAL, et on dirait que la taille est le nombre de mots. Donc, il semble que vous avez raison, il devrait être 2 (pour envoyer 2 mots de 16 bits) –

+0

Merci pour votre réponse. Je l'ai testé et ça a marché. Mais je pense que la définition de la fonction doit être modifiée pour prendre en charge les données 16 bits sans conversion de type. – Alithewise