初识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条回答
正点原子
1楼-- · 2019-10-17 13:42
 精彩回答 2  元偷偷看……
jikaishihuaidan
2楼-- · 2019-10-17 15:39
回复【14楼】正点原子:
---------------------------------
恩恩。
闷鱼
3楼-- · 2019-10-17 15:47
回复【3楼】wolfdong7:
---------------------------------可以贴你的代码 给我 学习一下么  我在学习SPI1 debug的时候就卡在这个while 一直不置位  
  读不出ID 等等 配置暂时不会修改 看看能不能接兄台之力 上一上台阶
hjhand
4楼-- · 2019-10-17 20:25
T0:原子&各位高手

我是新手,刚刚看到SPI,看到手册里面说了,在写的时候要先发送,发送不一定要传送内容,只是为了给从机一个时钟,因为SCLK是主机来发出的,所以想单独写一个SPI写函数的话,那么这个写函数里面要有一个空发送指令,目的是提供从机的写时钟,请问一下原子大哥,这个理解是不是对的呀,因为我觉得SPI读写函数应该是可以分开的!!!
正点原子
5楼-- · 2019-10-18 01:41
回复【17楼】hjhand:
---------------------------------
不需要空指令,直接发,那边就收了。
关键你要提供时钟。
hjhand
6楼-- · 2019-10-18 01:41
 精彩回答 2  元偷偷看……

一周热门 更多>