打印

为什么读和写能写在一个函数中啊

[复制链接]
1230|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2014-1-13 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u8 SPIx_ReadWriteByte(u8 TxData)
{
    u8 retry=0;
    while((SPI1->SR&1<<1)==0)//等待发送区空
    {
        retry++;
        if(retry>200)return 0;
    }
    SPI1->DR=TxData; //发送一个byte
    retry=0;
    while((SPI1->SR&1<<0)==0) //等待接收完一个byte
    {
        retry++;
        if(retry>200)return 0;
    }
r    eturn SPI1->DR; //返回收到的数据
}
学习SPI实验,看到SPI读写函数有点不解,为什么读和写能写在一个函数中啊?
当我读数据的时候要先发送一个数据么?
当我写完数据还要读一个数据么?

沙发
feilusia| | 2014-1-13 11:27 | 只看该作者
这个你要了解SPI的工作原理。
主从机通信的时钟是靠主机发送数据时产生的,也就是只有主机有发送数据的主动权,从机只能把数据准备好后待命。
SPI模块内部有移位寄存器,发送一个数据的同时会接收到另一台机子的数据,也就是发送和接收是同时进行的。

使用特权

评论回复
板凳
zhangyang86| | 2014-1-13 15:28 | 只看该作者
SPI里面有移位寄存器。。。
建议楼主百度SPI原理。。。。或者参考我们手册

使用特权

评论回复
地板
拿起书本| | 2014-1-13 19:08 | 只看该作者
SPI是全双工的了.
MI是数据输入的.
M0是数据输出的.
SCK由主机产生,当SCK输出的时候,MI输入数据,同时MO输出数据.这样发送的时候就顺便收了.

使用特权

评论回复
5
zhangyang86| | 2014-1-14 12:39 | 只看该作者
拿起书本 发表于 2014-1-13 19:08
SPI是全双工的了.
MI是数据输入的.
M0是数据输出的.

正解

使用特权

评论回复
6
fengye5340| | 2014-1-14 13:21 | 只看该作者
楼主要理解SPI通信的精髓。它和普通的串行通信不一样,
SPI通信是靠双方互换数据来通信的。你把0xFF发过去,对方把你要的数据发过来。
加上是双向通信,所以读数据和写数据是同步进行的

使用特权

评论回复
7
jxmzzr| | 2014-1-14 18:59 | 只看该作者
spi的时序就是在sck的控制下,两个双向移位寄存器进行数据交换。所以它是一边发送一边接收的,必须发送一个数据才能接收一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝