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

2019-07-20 07:48发布

请教大家一个问题,如何实现SPI的16位数据输出,我看封装的函数中他们的移位寄存器是8位的,而16位的如何传输,求解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
简单的旅行
1楼-- · 2019-07-21 17:58
xiaoff 发表于 2018-5-30 15:18
你对这个函数理解的不太对。uint16_t        DeTxBuffer[1] 是指DeTxBuffer所存储的数据是16bit,而非D ...

谢谢您的解答,你的意思是只要指针的地址位(8位)正确,具体里面装多大的数据(16 or8位)无所谓,对吧?
屋脊雀
2楼-- · 2019-07-21 22:12
 精彩回答 2  元偷偷看……
屋脊雀
3楼-- · 2019-07-21 23:14
简单的旅行 发表于 2018-5-31 10:06
谢谢您的解答,你的意思是只要指针的地址位(8位)正确,具体里面装多大的数据(16 or8位)无所谓,对吧 ...

装什么数据确实无所谓,程序又不知道你要做什么,
但是发送什么数据出去,你有所谓吧?
我要发U16,程序给你发个U8出去,不能无所谓。
hanzixi_angel
4楼-- · 2019-07-22 01:35
屋脊雀 发表于 2018-5-18 10:17
指针是8位的?还是说指针指向的数据是8位的?

指针指向的数据是8位的
xiaoff
5楼-- · 2019-07-22 01:36
 精彩回答 2  元偷偷看……
xiaoff
6楼-- · 2019-07-22 03:21
屋脊雀 发表于 2018-6-1 12:11
1 我认为我没有理解错。
uint16_t        DeTxBuffer[1] 是指DeTxBuffer所存储的数据是16bit,而非DeTxB ...

如果你的DataSize = SPI_DATASIZE_16BIT;而你的数据是8bit,那么16个数据传输的时钟仅仅有8个有效,其余的会用0进行补齐。
如果你的DataSize = SPI_DATASIZE_8BIT;而你的数据是16bit,依然可以发送,但是时钟因为被设定成8个,所有你只能分两次发送结束。除非溢出时间被你设置的太短,传输被中断。具体可以查看函数库中
      static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
对此有所描述。

一周热门 更多>