nrf24l01是适合初学入门的无线模块.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
nrf24l01是适合初学入门的无线模块.doc

24l01的多机通信采用频分多子的方法,只需要在接受端对不同的通道配置地址即可。发送端使用相应的地址作为本机地址。接受数据时通过读取STATUS中相关位即可得知接收的是哪个通道的数据。 以下仅给出多对一的通信代码。至于一对多,以及多对多等情况读者可以自行研究了。 只给出相关部分,其他部分请参考前两篇文章 接受端 uint const ADDRESS0[ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //频道0接收地址 uint const ADDRESS1[ADR_WIDTH]= {0xc4,0xc3,0xc2,0xc1,0xc0}; //频道1接收地址 uchar who=0xff; //**************************************************************************************** /*NRF24L01初始化 //***************************************************************************************/ void init_NRF24L01(void) { ??? us(100); ?? CE=0;??? // chip enable ?? CSN=1;?? // Spi disable ?? SCK=0;?? // Spi clock line init high //SPI_Write_Buf(WRITE_REG + TX_ADDR,ADDRESS0, ADR_WIDTH);??? // 写本地地址 ?? SPI_Write_Buf(WRITE_REG + RX_ADDR_P0,ADDRESS0,ADR_WIDTH); // 频道0地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P1,ADDRESS1,ADR_WIDTH); // 频道1地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x03);????? ????? //频道0、1自动应答 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x03); ????? //允许频道0、1 SPI_RW_Reg(WRITE_REG + RF_CH, 0);??????? //?? 设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //0接收数据长度 SPI_RW_Reg(WRITE_REG + RX_PW_P1, RX_PLOAD_WIDTH); //1接收数据长度 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);?? ?? //设置发射速率为1MHZ,发射功率为最大值0dB } /******************************************************************************************************/ /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) /*功能:数据读取后放如rx_buf接收缓冲区中 /******************************************************************************************************/ unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) { ??? unsigned char revale=0; sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况 if(RX_DR)???? // 判断是否接收到数据 { ?? CE = 0; ??? ?? SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH); ?? revale =1; ?? who=sta0x0e; ?? who|=0xf0;?????????????????????????? //通道0:who==0xf0;通道1:who==0xf2 } SPI_RW_Reg(WRITE_REG+STATUS,0xff);?? //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志 CSN=0; SPI_RW(FLUSH_RX); CSN=1; return revale; } void main(void) { u

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档