数码小叶 发表于 2015-7-9 10:14:11

SPI看懵了,求解啊

如图所示:

1:为什么SPI在写的时候最后要去判断接收缓冲区呢?



2:同样,接收数据的时候要往发送缓冲区写入0xFF{:3_41:}

星辰一方 发表于 2015-7-9 10:22:36

大概是SPI这个通讯协议本质就是:移位操作,接收一位同时发一位……
个人理解,仅供参考

creep 发表于 2015-7-9 10:46:54

1、SPI在写的时候可以不用判断接收缓冲区。
2、SPI在接收的时候因为是主模式所以要向从设备写数据提供时钟,这个时候写的数据具体是什么应该关系不大。

建议调用库函数处理发送接收数据。
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)

moyanming2013 发表于 2015-7-9 10:56:30

creep 发表于 2015-7-9 10:46
1、SPI在写的时候可以不用判断接收缓冲区。
2、SPI在接收的时候因为是主模式所以要向从设备写数据提供时钟 ...

学习了。。。
支持使用库

stary666 发表于 2015-7-9 11:13:00

自己写就行了

lkl0305 发表于 2015-7-9 11:36:01

这个建议楼主找个spi的基础知识看看先,然后再看程序

魅影迷踪 发表于 2015-7-9 12:30:39

时序要求吧

jcx0324 发表于 2015-7-9 13:06:27

读的时候也是需要发数据过去的

风子 发表于 2015-7-9 16:12:32

SPI是环形移位寄存器的数据交换,你得给从机发数据(一般发0),才能读得需要的从机数据,同时发数据也提供时钟

watershade 发表于 2015-7-9 20:40:01

SPI只有一个sbuf,不想UART收发各有一个缓存。当你接受的时候,向缓存里面写入0xff(其实别的也可以,只要另一个设备忽略你发送的信息即可。)

假设你是从机,如果主机没有刻意向SBUF里面写东西,那当你读数据时将读会status。

这张图是官方的图。收发各有一个buf。当sck发送心跳时,一个心跳移动一位,这其实就是个串行移位寄存器。
页: [1] 2
查看完整版本: SPI看懵了,求解啊