管理员
  
- 积分
- 165540
- 金钱
- 165540
- 注册时间
- 2010-12-1
- 在线时间
- 2117 小时
|
发表于 2013-8-6 10:54:01
|
显示全部楼层
回复【3楼】风:
---------------------------------
NRF就是通过指令+寄存器地址来实现的啊.
//NRF24L01寄存器操作命令
#define READ_REG 0x00 //读配置寄存器,低5位为寄存器地址
#define WRITE_REG 0x20 //写配置寄存器,低5位为寄存器地址
这里我们注释就说明白了,第6位如果是1,那么就表示是写寄存器,寄存器地址在低5位体现.如果是0,就表示读寄存器.
NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01); //使能通道0的自动应答
NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址
NRF24L01_Write_Reg(WRITE_REG+RF_CH,40); //设置RF通信频率
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
具体到代码里面,你可以看到这样的写法,EN_AA就是寄存器地址,WRITE_REG其实就是把第六位设置为1,表示写寄存器,后面带的0x01,则是具体写入到EN_AA寄存器的值了.
然后:
//SPI写寄存器
//reg:指定寄存器地址
//value:写入的值
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
{
u8 status;
NRF24L01_CSN=0; //使能SPI传输
status =SPI2_ReadWriteByte(reg);//发送寄存器号
SPI2_ReadWriteByte(value); //写入寄存器的值
NRF24L01_CSN=1; //禁止SPI传输
return(status); //返回状态值
}
这就是写寄存器的函数,可以看到,先发送寄存器号(写标志+寄存器地址),然后发送各要写入的值,完成一次操作.
读寄存器操作如下:
//读取SPI寄存器值
//reg:要读的寄存器
u8 NRF24L01_Read_Reg(u8 reg)
{
u8 reg_val;
NRF24L01_CSN = 0; //使能SPI传输
SPI2_ReadWriteByte(reg); //发送寄存器号
reg_val=SPI2_ReadWriteByte(0XFF);//读取寄存器内容
NRF24L01_CSN = 1; //禁止SPI传输
return(reg_val); //返回状态值
}
这就先写寄存器号,再度寄存器内容.
很好理解了.
多写写代码吧,光猜测,云里雾里的...实际写两行代码,比你冥想一天来的强得多.... |
|