关于函数 SPI1_ReadWriteByte(u8 TxData) 的疑问

2019-08-14 04:49发布

问下这不是个SPI数据交换函数吗?如果用这个函数来制作“读取”函数,返回值是不是永远和发送值一样了?

具体问题如下:(利用SPI1_ReadWriteByte(u8 TxData)函数制造xReadCH376Data( void ))
SPI1_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;
    }
    return SPI1->DR;           //·?????????????
}

UINT8    xReadCH376Data( void )
{
    UINT8 i;
    mDelayuS(10);
    i = SPI1_ReadWriteByte( 0xFF );
    return( i );
}

这么一来这个“读取”程序是不是要不停读出0xFF了?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-08-14 04:58
实际上呢?
是可以运行的.这个你心知肚明.
为什么呢?
因为SPI是全双工接口,实际上有2个DR,一个用于发送的写数据的DR,一个用于接收的收数据的DR.
你往DR写值,调用的是发送DR.
你读DR的值,调用的是接收DR.
所以不会混淆的!
bht890811
2楼-- · 2019-08-14 10:29
回复【2楼】正点原子:
---------------------------------
实际上返回了0xFF,可能是其他地方出了问题,我再找找原因吧,谢谢了!
加油comeon
3楼-- · 2019-08-14 15:12
长知识
lucky邪神
4楼-- · 2019-08-14 15:38
正点原子 发表于 2013-6-6 11:54
实际上呢?
是可以运行的.这个你心知肚明.
为什么呢?
因为SPI是全双工接口,实际上有2个DR,一个用于发送的写 ...

我也出出现这个问题,自己写的程序读出来的返回值一直是空,使用库函数和寄存器例程都是读出来的 空0xff。(战舰V3)
wanghy
5楼-- · 2019-08-14 17:05
 精彩回答 2  元偷偷看……
lucky邪神
6楼-- · 2019-08-14 22:06
wanghy 发表于 2017-8-29 10:41
如果存储器里面本身就没有存储内容,读出来的肯定就是0xff

读之前都有往W25Q128中写内容。我使用原子哥的程序也是这样

一周热门 更多>