- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)