【问题标题】:STM32 HAL SPI 16 bit TransmitSTM32 HAL SPI 16 位发送
【发布时间】: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 比较陌生,所以答案对你来说可能很明显。

【问题讨论】:

    标签: c stm32 spi stm32f4discovery stm32f4


    【解决方案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位数据,不用类型转换。
    猜你喜欢
    • 2021-08-27
    • 2018-01-09
    • 2022-01-20
    • 1970-01-01
    • 2021-05-07
    • 2021-06-20
    • 2017-06-05
    • 2017-05-26
    • 2017-04-14
    相关资源
    最近更新 更多