STM32 HAL SPI 16 位传输

STM32 HAL SPI 16 bit Transmit

我正在尝试使用 HAL_SPI_Transmit(.) 进行 16 位数据传输。

我已经使用 STM32Cube 将 SPI 配置为 16 位数据大小

(与 hspi2.Init.DataSize = SPI_DATASIZE_16BIT)。

我尝试用 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*,它returns出现以下错误:

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

那么如何使用 HAL_SPI_Transmit() 发送 16 位数据?

我找到了这个 link 但只讨论了错误,没有讨论使用该功能的方法。所以我的问题仍然存在。

我已经在网上搜索了,但没有任何运气。 我对 STM32 比较陌生,所以答案对你来说可能是显而易见的。

要删除错误,请写入:

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 系列,因此您应该不会遇到 link 中提到的对齐错误。