OpenEdv-开源电子网

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

SPI读写寄存器问题

[复制链接]

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
发表于 2015-3-31 10:18:18 | 显示全部楼层 |阅读模式
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
{
      u8 status;
      NRF24L01_CSN=0;                 //使能SPI传输
      status=SPI1_ReadWriteByte(reg); //发送寄存器号  
      SPI1_ReadWriteByte(value);      //写入寄存器的值
      NRF24L01_CSN=1;                 //禁止SPI传输   
      return(status);       //返回状态值
}

//读取SPI寄存器值
//reg:要读的寄存器
u8 NRF24L01_Read_Reg(u8 reg)
{
u8 reg_val;    
  NRF24L01_CSN = 0;           //使能SPI传输
  SPI1_ReadWriteByte(reg);   //发送寄存器号
  reg_val=SPI1_ReadWriteByte(0XFF); //发送空指令,读取寄存器内容
  NRF24L01_CSN = 1;           //禁止SPI传输    
  return(reg_val);           //返回状态值
}

SPI读写是一起的,读写寄存器是环形交换的,而且设置为8位了,
第一个函数,status=SPI1_ReadWriteByte(reg); //发送寄存器号
返回的status是"状态值"我就不明白了,
(1)是因为nrf24l01发送了某寄存器号,就会同时接收到这个寄存器数据吗? 那这样状态值应该就是寄存器的内容吧? (此时读取的接收寄存器)
(2)还是说status=reg?(此时读取的是发送寄存器,也就是寄存器号)

第二个函数,
SPI1_ReadWriteByte(reg);   //发送寄存器号
reg_val=SPI1_ReadWriteByte(0XFF); //发送空指令,读取寄存器内容
按下面这个函数来看,发送0xff是空指令,为了提供nrf24l01发送(主机接收)的时钟,读取发送寄存器的话好像没什么意义,所以应该是第一种情况吧?求轻拍
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-1 00:20:30 | 显示全部楼层
 1,看《nRF24L01中文说明书.pdf》13页,末尾,Sn-状态寄存器位,然后看图:



2,这是读寄存器,先发送寄存器编号,然后读取寄存器,0XFF就是输出时钟,然后维持MOSI为高而已。之前和你解释过了。

还不懂就慢慢参悟吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 11:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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