初识SPI,遇到问题,发帖请教。(已解决)

2019-10-16 02:21发布

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读写函数有点不解,为什么读和写能写在一个函数中啊?
当我读数据的时候要先发送一个数据么?
当我写完数据还要读一个数据么?

请大家指点下。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
toddchen
1楼-- · 2019-10-18 04:29
学习了
一般BDN
2楼-- · 2019-10-18 06:10
回复【2楼】正点原子:
---------------------------------
retry++;
 if(retry>200)return 0;
在这个变量的作用是什么,等待 还是发送区的数据呢
无极电工
3楼-- · 2019-10-18 12:05
回复【22楼】无极电工:
---------------------------------
防止死机
正点原子
4楼-- · 2019-10-18 13:43
回复【23楼】正点原子:
---------------------------------
原子的论坛回复就是快,
小弟查了老多资料大部分都是使用retry变量,小弟愚笨还是没太弄清怎么防死机
它有延时作用吗,为什么是要200呢,retry++的变量在整个程序没什么大出现啊
希望原子大哥指点下
无极电工
5楼-- · 2019-10-18 16:37
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-10-18 18:54
回复【20楼】toddchen:
---------------------------------
 我的也是这样死在 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);  这里了。现在还在郁闷中...

一周热门 更多>