SPI看懵了,求解啊
如图所示:1:为什么SPI在写的时候最后要去判断接收缓冲区呢?
2:同样,接收数据的时候要往发送缓冲区写入0xFF{:3_41:}
大概是SPI这个通讯协议本质就是:移位操作,接收一位同时发一位……
个人理解,仅供参考 1、SPI在写的时候可以不用判断接收缓冲区。
2、SPI在接收的时候因为是主模式所以要向从设备写数据提供时钟,这个时候写的数据具体是什么应该关系不大。
建议调用库函数处理发送接收数据。
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
creep 发表于 2015-7-9 10:46
1、SPI在写的时候可以不用判断接收缓冲区。
2、SPI在接收的时候因为是主模式所以要向从设备写数据提供时钟 ...
学习了。。。
支持使用库 自己写就行了 这个建议楼主找个spi的基础知识看看先,然后再看程序 时序要求吧 读的时候也是需要发数据过去的 SPI是环形移位寄存器的数据交换,你得给从机发数据(一般发0),才能读得需要的从机数据,同时发数据也提供时钟 SPI只有一个sbuf,不想UART收发各有一个缓存。当你接受的时候,向缓存里面写入0xff(其实别的也可以,只要另一个设备忽略你发送的信息即可。)
假设你是从机,如果主机没有刻意向SBUF里面写东西,那当你读数据时将读会status。
这张图是官方的图。收发各有一个buf。当sck发送心跳时,一个心跳移动一位,这其实就是个串行移位寄存器。
页:
[1]
2