OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7994|回复: 6

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

[复制链接]

37

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-6-4
在线时间
14 小时
发表于 2013-6-6 11:50:53 | 显示全部楼层 |阅读模式
问下这不是个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了?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2013-6-6 11:54:46 | 显示全部楼层
实际上呢?
是可以运行的.这个你心知肚明.
为什么呢?
因为SPI是全双工接口,实际上有2个DR,一个用于发送的写数据的DR,一个用于接收的收数据的DR.
你往DR写值,调用的是发送DR.
你读DR的值,调用的是接收DR.
所以不会混淆的!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

37

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-6-4
在线时间
14 小时
 楼主| 发表于 2013-6-6 11:58:16 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
实际上返回了0xFF,可能是其他地方出了问题,我再找找原因吧,谢谢了!
回复 支持 反对

使用道具 举报

3

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2017-7-29
在线时间
18 小时
发表于 2017-8-28 15:49:46 | 显示全部楼层
长知识
回复 支持 反对

使用道具 举报

5

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2016-11-1
在线时间
27 小时
发表于 2017-8-28 21:04:15 | 显示全部楼层
正点原子 发表于 2013-6-6 11:54
实际上呢?
是可以运行的.这个你心知肚明.
为什么呢?
因为SPI是全双工接口,实际上有2个DR,一个用于发送的写 ...

我也出出现这个问题,自己写的程序读出来的返回值一直是空,使用库函数和寄存器例程都是读出来的 空0xff。(战舰V3)
回复 支持 反对

使用道具 举报

13

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2016-4-19
在线时间
139 小时
发表于 2017-8-29 10:41:26 | 显示全部楼层
lucky邪神 发表于 2017-8-28 21:04
我也出出现这个问题,自己写的程序读出来的返回值一直是空,使用库函数和寄存器例程都是读出来的 空0xff ...

如果存储器里面本身就没有存储内容,读出来的肯定就是0xff
回复 支持 反对

使用道具 举报

5

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2016-11-1
在线时间
27 小时
发表于 2017-8-29 13:38:23 | 显示全部楼层
wanghy 发表于 2017-8-29 10:41
如果存储器里面本身就没有存储内容,读出来的肯定就是0xff

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 03:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表