2017-08-24 410 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