有关STM32通过硬件SPI实现16为数据传输的问题

2019-07-20 07:48发布

请教大家一个问题,如何实现SPI的16位数据输出,我看封装的函数中他们的移位寄存器是8位的,而16位的如何传输,求解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
xiaoff
1楼-- · 2019-07-20 23:20
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)指针为8位,你定义uint16_t的数据仍然是可以用的,举个例子
我定义16位的数据:
                uint16_t        DeTxBuffer[1] ;
                uint16_t        DeRxBuffer[1] ;
收发时使用数据转换即可:
HAL_SPI_TransmitReceive(&hspi1,(uint8_t *)DeTxBuffer,(uint8_t *)DeRxBuffer,1,1000);
屋脊雀
2楼-- · 2019-07-21 00:29
 精彩回答 2  元偷偷看……
屋脊雀
3楼-- · 2019-07-21 02:54
 精彩回答 2  元偷偷看……
屋脊雀
4楼-- · 2019-07-21 06:14
楼主,2楼说的对,SPI设置可以选择8位或者16位。
那为什么封装的函数都是8位的?因为大部分情况都是8位的。16位的很少用吧?
如果你有特殊需求,那就自己改一个函数,发16位的。
要不就把16位拆成两个8bit的,分两次发送。
简单的旅行
5楼-- · 2019-07-21 11:48
 精彩回答 2  元偷偷看……
xiaoff
6楼-- · 2019-07-21 17:19
屋脊雀 发表于 2018-5-18 10:18
函数内部转换了吗?不转换的话16位数据是不是只有低8位发送出去?或者是说u16是分两次发送出去?

  你对这个函数理解的不太对。uint16_t        DeTxBuffer[1] 是指DeTxBuffer所存储的数据是16bit,而非DeTxBuffer的地址是16bit,在单片机中一般使用8bit 的地址。
  所以函数所需要的是地址,而不是数据;即使你的数据不是8位的也不是16位的,只要地址传递正确,依然可以收发数据。
  另外,收发数据理应根据数据的大小来发送数据,最好不要将16位的拆分成8位的数据。

一周热门 更多>