NRF24L01调试学习经验

/ 0评 / 1

首先,得有两个板子,这是先决条件.当然,你有更多,也是没关系的.如果是完整一个开发板,带NRF24L01接口的也很多,但是就会比较贵,我自己就选用比较屌丝的方案.买两个只带24L01口,LED,以及基本不带外设的板子,但是价格也还是挺高的,竟然要黑我40多,所以不太推荐.另外大家在调通之后,用很牛逼外观的什么外置天线的程序都是一样的,

然而.用51入门人人会.但是我觉得51嘛.没硬件SPI,用起来我就特别不爽,所以,我自己在一个STM32F0上调试,其实F0已经非常非常便宜了,而且STM32本身很简单(其实我觉得太简单也不好,搞到大家思考能力都降低了.),所以并不会因为MCU平台难到人.

先看看我的平台:

 QQ截图20150808224851

然后要理解NRF24L01的几个概念,我尽量用通俗的语言来描述.

  1. NRF24L01是广播形式发送的,只要频点移植,相当于一个人在服务中心大喊,整个会场都听到了.但是你在别的服务中心喊,这个会场肯定是听不到的.
  2. 当频点一致时候,接收地址也要一致,虽然人家在服务中心喊某某某,但不是喊你,你还是无动于衷,当有人喊你时候,你才会反应.
  3. 你可以有多个接收地址,意思就是说,你的同学叫你小李,你的同事叫你李大叔,你的朋友叫你李工程师,当遇到这些名字时候,你都会认为是叫你自己,当然,可能重名,这时候你也是会接收的,只是听到的内容有点糊涂,摸不着头脑.
  4. 当你说话越快(速率越高),越容易听不清楚,可能人家叫小丽,结果小李应答了,这就是串扰.而且当你说的快的时候,你也不会说的特别大声,所以距离也短了.这个NRF24L01也是一个道理.

其他还有很多概念,但暂时没必要说.目前最关键的问题是,把话传出去.然后这个24L01和MCU是SPI通信,首先肯定是初始化SPI,8Bit的,时序是标准的,很好用.刚上电时候也推荐进行初始化配置:

GPIO_ResetBits(GPIOA, GPIO_Pin_3);
NRF24L01_Write_Reg(WRITE_REG + RX_PW_P0, PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
NRF24L01_Write_Reg(FLUSH_RX, 0xff); //清除RX FIFO寄存器
NRF24L01_Write_Buf(WRITE_REG + TX_ADDR, TX_ADR, TX_ADDR_WIDTH); //写TX节点地址
NRF24L01_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADR, RX_ADDR_WIDTH); //设置RX节点地址,主要为了使能ACK
NRF24L01_Write_Reg(WRITE_REG + EN_AA, 0x01); //使能通道0的自动应答
NRF24L01_Write_Reg(WRITE_REG + EN_RXADDR, 0x01); //使能通道0的接收地址
NRF24L01_Write_Reg(WRITE_REG + SETUP_RETR, 0x1a); //设置自动重发间隔时间:500us + 86us;最大自动重发次数:10(a)次
NRF24L01_Write_Reg(WRITE_REG + RF_CH, 0); //设置RF通道为40 收发必须一致,0为2.4GHz
NRF24L01_Write_Reg(WRITE_REG + RF_SETUP, RATE); //设置TX发射参数,0db增益,1Mbps,低噪声增益开启
NRF24L01_Write_Reg(WRITE_REG + CONFIG, 0x0f); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
GPIO_SetBits(GPIOA, GPIO_Pin_3); //CE置高,使能发送

是然后就可以通过读IRQ引脚,获取相应的信息.主体查询数据到来的流程就这样:

  1. 查询IRQ引脚,或者中断方式,有就RxPacket.
  2. 发送,直接TxPacket.
  3. Tx/Rx方法里面写得很简单了.

发送嘛,可以直接填发送函数,程序打包如下:

NRF24L01收发

的其实就是这个模块不复杂的,就是之前一直没想明白而已.模块接线:

QQ截图20150808231401

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注