资源描述:
《nrf24l01参考程序%28包含多个实例》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、(相关人员如觉得本人水平低下,还请见谅)Nrf24L01的使用程序和使用方法和简单操作:功能:无线对发程序。两个模块a,b,实现按下一个按键,会在对方的数码管上显示3或4,在本机上显示1,2。当一个模块,比如a模块。当两个按键按下其中一个,则会在另一个模块b上显示数字3,4(具体根据按下哪个按键)。以上功能描述,B模块按键按下,如同a模块一样的功能,不做系统性描述了。下面给出程序中几个地方的解释:#defineREAD_REG0x00//读寄存器指令#defineWRITE_REG0x20//写寄存器指令#defineRD_RX_PLOAD0x61//读取接收数据指
2、令#defineWR_TX_PLOAD0xA0//写待发数据指令#defineFLUSH_TX0xE1//冲洗发送FIFO指令#defineFLUSH_RX0xE2//冲洗接收FIFO指令#defineREUSE_TX_PL0xE3//定义重复装载数据指令#defineNOP0xFF//保留类似这种的描述,可以等同于READ_REG=0x00;这个是经过实际程序测试出来的,比如以下程序:#include#definek0xfevoidmain(){P1=k;}则会出现此类结果:MOSI=(uchar&0x80);//output'uchar',MS
3、BtoMOSIuchar=(uchar<<1);//shiftnextbitintoMSB..SCK=1;//SetSCKhigh..uchar
4、=MISO;//capturecurrentMISObitSCK=0;此处为spi的核心,是spi协议的编程,其中uchar
5、=MISO;表示uchar
6、=MISO
7、uchar;MOSI=(uchar&0x80);其中0x80是10000000,与上uchar,这种&,是按位与,故可以从uchar提取出一个电平给mosi。MOSI=(uchar&0x80);//output'uchar',MSBtoMOSIuchar=(u
8、char<<1);这两句组合起来用,就实现了把uchar编程8位2进制数后的每一位都可以发送给mosi;Uchar的只待对象,就是上面的诸如#defineFLUSH_TX0xE1这样的数,或者是相关的发送数据。*pBuf这个并不是一个主要的问题,实际这个是涉及指针问题的,带*的跟地址有关系,但是我们其实不需要很关心编译的时候数据被具体存入哪个地址,即使是很重要的数据。voidinit_NRF24L01(void){inerDelay_us(100);CE=0;//chipenableCSN=1;//SpidisableSCK=0;//SPI_Write_Buf(WR
9、ITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写本地地址SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写接收端地址SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//频道0自动ACK应答允许SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允许接收地址只有频道0,如果需要多频道可以参考Page21SPI_RW_Reg(WRITE_REG+RF_CH,0);//设置信道工作为2.4GHZ,收发必须一致SPI
10、_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为32字节SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//设置发射速率为1MHZ,发射功率为最大值0dB}在整个初始化中我们看到:CE=0;//chipenableCSN=1;//Spidisable这是设置整个的状态。如过状态设置成待机,则引脚可能变为高阻。(以上并非全部引脚)SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写本地地址SPI_Write_
11、Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写接收端地址类似以上两句,这是应用spi的子程序,将寄存器指令放入nrf24l01。如果需深究,请参考说明书,手册等。或者可以通过#defineREAD_REG0x00//读寄存器指令等了解大概流程。在整个无线通信过程中,初始化只需设置一次。TxBuf[]存放的是发送的数据。并且此数据被发送时,是将这个数组的数全部发送的。对方也全部接收。RxBuf[]接收数组,用于存放对方发来的数据。SetRX_Mode();nRF24L01_RxPacket(RxBuf);