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 中提到的对齐错误。
我正在尝试使用 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 中提到的对齐错误。