OpenEdv-开源电子网

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

pBuf[u8_ctr]=SPI1_ReadWriteByte(0XFF);

[复制链接]

22

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-9-4
在线时间
26 小时
发表于 2017-3-20 20:16:32 | 显示全部楼层 |阅读模式
5金钱
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len)
{
  u8 status,u8_ctr;               
  NRF24L01_CSN = 0;           //ê1ÄüSPI′«êä
  status=SPI1_ReadWriteByte(reg);//·¢Ëí¼Ä′æÆ÷Öμ(λÖÃ),2¢¶áè¡×′ì¬Öμ             
  for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPI1_ReadWriteByte(0XFF);//&#182;á3&#246;êy&#190;Y
  NRF24L01_CSN=1;       //1&#216;±&#213;SPI′&#171;ê&#228;
  return status;        //·μ&#187;&#216;&#182;áμ&#189;μ&#196;×′ì&#172;&#214;μ
}


  有人知道这的for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPI1_ReadWriteByte(0XFF);中写入0xFF是为什么吗?

最佳答案

查看完整内容[请看2#楼]

SPI是同步全双工通讯啊,就是 ,写的时候同时在读,读的时候也要写,这里想读一个数据,所以写入0XFF,才会产生时钟,好让从机发送数据给你单片机
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2016-11-1
在线时间
64 小时
发表于 2017-3-20 20:16:33 | 显示全部楼层
SPI是同步全双工通讯啊,就是 ,写的时候同时在读,读的时候也要写,这里想读一个数据,所以写入0XFF,才会产生时钟,好让从机发送数据给你单片机
回复

使用道具 举报

3

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2016-12-22
在线时间
39 小时
发表于 2017-3-20 20:56:08 | 显示全部楼层
SPI1_ReadWriteByte 函数贴出来看下
天地不仁以万物为刍狗,圣人不仁以百姓为刍狗!http://www.openedv.com/static/image/smiley/default/smile.gif
回复

使用道具 举报

22

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-9-4
在线时间
26 小时
 楼主| 发表于 2017-3-21 19:51:48 | 显示全部楼层
fankai 发表于 2017-3-20 20:16
SPI是同步全双工通讯啊,就是 ,写的时候同时在读,读的时候也要写,这里想读一个数据,所以写入0XFF,才会 ...

那它循环8次,放8次0xff是为什么啊
回复

使用道具 举报

22

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-9-4
在线时间
26 小时
 楼主| 发表于 2017-3-21 19:52:22 | 显示全部楼层
93035199 发表于 2017-3-20 20:56
SPI1_ReadWriteByte 函数贴出来看下

u8 SPI1_ReadWriteByte(u8 TxData)
{                                          

  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//μè′y·¢&#203;í&#199;&#248;&#191;&#213;£Sè·±£SR&#188;&#196;′&#230;&#198;÷&#206;a0
       
        SPI_I2S_SendData(SPI1, TxData); //í¨1yíaéèSPIx·¢&#203;íò&#187;&#184;&#246;byte  êy&#190;Y
               
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //μè′y&#189;óê&#213;íêò&#187;&#184;&#246;byte  

        return SPI_I2S_ReceiveData(SPI1); //·μ&#187;&#216;í¨1ySPIx×&#238;&#189;ü&#189;óê&#213;μ&#196;êy&#190;Y       
                    
}
回复

使用道具 举报

6

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2016-11-1
在线时间
64 小时
发表于 2017-3-21 19:56:19 | 显示全部楼层
xxhjxx 发表于 2017-3-21 19:51
那它循环8次,放8次0xff是为什么啊

说明它要读8个字节啊,所以循环8次,而不是读8个位,读一个字节,在SP1_ReadWriteByte就实现了,其实你的问题应该是  这里为什么要读8个字节,而不是关于SPI本身通讯的问题,不是自己模拟的,用的是库,SPI直接实现了的
回复

使用道具 举报

6

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2016-11-1
在线时间
64 小时
发表于 2017-3-21 19:58:25 | 显示全部楼层
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len) 这里也输入参数  *pBuf  就是一个指针,就是要存储多个字节的,应该是连续读NRF24L01的多个寄存器
回复

使用道具 举报

22

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-9-4
在线时间
26 小时
 楼主| 发表于 2017-3-21 20:01:07 | 显示全部楼层
fankai 发表于 2017-3-21 19:58
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len) 这里也输入参数  *pBuf  就是一个指针,就是要存储多个字节 ...

其实我想知道的是为什么它放的8次数都是0xff
回复

使用道具 举报

6

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2016-11-1
在线时间
64 小时
发表于 2017-3-21 20:02:45 | 显示全部楼层
xxhjxx 发表于 2017-3-21 20:01
其实我想知道的是为什么它放的8次数都是0xff

SPI就是这样啊,读的时候也要写一个数进去,一般就写0xff
回复

使用道具 举报

22

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-9-4
在线时间
26 小时
 楼主| 发表于 2017-3-21 20:29:20 | 显示全部楼层
fankai 发表于 2017-3-21 20:02
SPI就是这样啊,读的时候也要写一个数进去,一般就写0xff

谢了,以后有不懂的再请教哦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 21:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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