STM32 HAL SPI 16 位发送
Posted
技术标签:
【中文标题】STM32 HAL SPI 16 位发送【英文标题】:STM32 HAL SPI 16 bit Transmit 【发布时间】:2018-02-01 21:51:08 【问题描述】:我正在尝试使用 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*,它返回如下错误:
error: #167: argument of type "uint16_t *" is incompatible with parameter of type "uint8_t *"
那么如何使用HAL_SPI_Transmit()
发送 16 位数据?
我找到了这个link,但只讨论了这个错误,而不是使用该功能的方式。所以我的问题仍然存在。
我已经搜索了网络没有任何运气。 我对 STM32 比较陌生,所以答案对你来说可能很明显。
【问题讨论】:
【参考方案1】:要消除错误,请写:
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 系列。
【讨论】:
我使用 2 作为 Size 参数的原因是我想发送 2 个 16 位数据。在那种情况下我应该写 4 吗? @纪尧姆 刚刚看了下HAL代码,貌似大小就是字数。所以看来你是对的,应该是2(发送2个16位字) 感谢您的回答。我测试了它并且它有效。但是我觉得应该把函数定义改成支持16位数据,不用类型转换。以上是关于STM32 HAL SPI 16 位发送的主要内容,如果未能解决你的问题,请参考以下文章