收藏 分享(赏)

NRF24L01多路通讯调试成功的关键__附程序.doc

上传人:精品资料 文档编号:10236443 上传时间:2019-10-23 格式:DOC 页数:6 大小:22.70KB
下载 相关 举报
NRF24L01多路通讯调试成功的关键__附程序.doc_第1页
第1页 / 共6页
NRF24L01多路通讯调试成功的关键__附程序.doc_第2页
第2页 / 共6页
NRF24L01多路通讯调试成功的关键__附程序.doc_第3页
第3页 / 共6页
NRF24L01多路通讯调试成功的关键__附程序.doc_第4页
第4页 / 共6页
NRF24L01多路通讯调试成功的关键__附程序.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、NRF24L01 多路通讯调试成功的关键(附基于串口助手的无线通讯工具源代码)本文档部分内容摘自网络,由于按照网上教程调试总不成功,特此分享自己的失败经验(红字加重) 。一、收发端共同的设置 1、设置信道工作频率(收发必须一致) 如:SPI_RW_Reg(WRITE_REG+RF_CH,40); 2、设置发射速率(2mbps 或 1mbps)和发射功率(收发必须一致); 如:SPI_RW_Reg(WRITE_REG+RF_SETUP,0x0f); /发射速率为 2Mbps,发射功率 最大为 0dB 二、接收端的设置(最关键) 1、 设置频道 0-5,自动 ACK应答允许 如: SPI_RW_R

2、eg(WRITE_REG+EN_AA,0x3f); 2、 设置接收通道全部允许 如: SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x3f); 3、向发送地址寄存器写入本地地址(5byte) 4、向各个频道的接收地址寄存器写入接收地址(调试成不成功的关键) 频道 0:5 个字节的地址 频道 1:5 个字节的地址(和频道 0的地址必须不同)频道 2:1 个字节的地址(为该通道发射机地址的最后一个字节) 有一个配置为发射模式的 24l01要通过该通道与接收机通信,发射机的本地地址为0x37,0xa1,0xb3,0xc9,0xda;则接收机频道 2的地址为(0x37) 频道 3:1

3、 个字节的地址(同上) 频道 4:1 个字节的地址(同上) 频道 5:1 个字节的地址(同上) 5、向每个频道(用那个写那个,需要在上面配置允许通道接收和 ack)接收数据长度寄存器写入接收数据宽度(最快均为 32) 频道 n:SPI_RW_Reg(WRITE_REG + RX_PW_Pn, RX_PLOAD_WIDTH); 如: 频道 5:SPI_RW_Reg(WRITE_REG + RX_PW_P5, RX_PLOAD_WIDTH); 6、配置为接收模式 如:SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);下面附上我的程序/*头文件*/#ifndef _NRF24L01

4、_H_#define _NRF24L01_H_sbit CE = P12;sbit CSN = P13;sbit IRQ = P14;sbit MOSI = P15;sbit MISO = P16;sbit SCK = P17;void NRF24L01_init(); /初始化模块uchar TX_packet(uchar *tx_buf); /返回值判断是否成功uchar RX_packet(uchar *rx_buf); /返回值判断是否成功void TX_MODE(); /发送模式void RX_MODE(); /接收模式/*/ SPI(nRF24L01) commands#defin

5、e READ_REG 0x00 / Define read command to register#define WRITE_REG 0x20 / Define write command to register#define RD_RX_PLOAD 0x61 / Define RX payload register address#define WR_TX_PLOAD 0xA0 / Define TX payload register address#define FLUSH_TX 0xE1 / Define flush TX register command#define FLUSH_RX

6、 0xE2 / Define flush RX register command#define REUSE_TX_PL 0xE3 / Define reuse TX payload register command#define NOP 0xFF / Define No Operation, might be used to read status register/*/ SPI(nRF24L01) registers(addresses)#define CONFIG 0x00 / Config register address#define EN_AA 0x01 / Enable Auto

7、Acknowledgment register address#define EN_RXADDR 0x02 / Enabled RX addresses register address#define SETUP_AW 0x03 / Setup address width register address#define SETUP_RETR 0x04 / Setup Auto. Retrans register address#define RF_CH 0x05 / RF channel register address#define RF_SETUP 0x06 / RF setup regi

8、ster address#define STATUS 0x07 / Status register address#define OBSERVE_TX 0x08 / Observe TX register address#define CD 0x09 / Carrier Detect register address#define RX_ADDR_P0 0x0A / RX address pipe0 register address#define RX_ADDR_P1 0x0B / RX address pipe1 register address#define RX_ADDR_P2 0x0C

9、 / RX address pipe2 register address#define RX_ADDR_P3 0x0D / RX address pipe3 register address#define RX_ADDR_P4 0x0E / RX address pipe4 register address#define RX_ADDR_P5 0x0F / RX address pipe5 register address#define TX_ADDR 0x10 / TX address register address#define RX_PW_P0 0x11 / RX payload wi

10、dth, pipe0 register address#define RX_PW_P1 0x12 / RX payload width, pipe1 register address#define RX_PW_P2 0x13 / RX payload width, pipe2 register address#define RX_PW_P3 0x14 / RX payload width, pipe3 register address#define RX_PW_P4 0x15 / RX payload width, pipe4 register address#define RX_PW_P5

11、0x16 / RX payload width, pipe5 register address#define FIFO_STATUS 0x17 / FIFO Status Register register address/*/#endif/*程序*/#include#include“define.h“#include“DELAY.h“#include“NRF24L01.h“uchar code TX_ADDRESS5 = 0,1,1,1,1;uchar code RX_ADDRESS_P05 = 0,1,1,1,1;uchar code RX_ADDRESS_P15 = 1,1,1,1,1;

12、uchar code RX_ADDRESS_P21 = 2;uchar code RX_ADDRESS_P31 = 3;uchar code RX_ADDRESS_P41 = 4;uchar code RX_ADDRESS_P51 = 5;uchar code Data_width = 1;uchar code Data_rt = 15;uchar SPI_RW(uchar dat) / SPI读写指令uchar i;for(i=0;i8;i+)SCK = 0;MOSI = (datdat = 1;SCK = 1;dat |= MISO; SCK = 0;return dat;uchar NR

13、F24L01_read_reg(uchar reg) /读某个寄存器的状态uchar value;CSN=0; /拉低 CSN,允许操作SPI_RW(reg); /写寄存器指令value = SPI_RW(0); /读寄存器值CSN=1; /拉高 CSN,禁止操作return value; /返回寄存器状态uchar NRF24L01_write_reg(uchar reg,uchar value) /写向某个寄存器写指令,并读出状态uchar status;CSN=0; /拉低 CSN,允许操作status = SPI_RW(reg); /写寄存器指令,并读出寄存器状态SPI_RW(valu

14、e); /写寄存器值CSN=1; /拉高 CSN,禁止操作return status; /返回寄存器之前的值uchar NRF24L01_read_buf(uchar reg,uchar *pbuf,uchar n)uchar i,status;CSN=0; /拉低 CSN,允许操作status = SPI_RW(reg); /写寄存器指令,并读出寄存器状态for(i=0;in;i+)pbufi = SPI_RW(0);/从寄存器读出一字节数据CSN = 1; /拉高 CSN,禁止操作return status;uchar NRF24L01_write_buf(uchar reg,uchar

15、*pbuf,uchar n)uchar i,status;CSN=0; /拉低 CSN,允许操作status = SPI_RW(reg); /写寄存器指令,并读出寄存器状态for(i=0;in;i+)SPI_RW(pbufi); /写一字节数据到寄存器CSN = 1; /拉高 CSN,禁止操作return status; void NRF24L01_init()CE = 0; /射频电路工作使能,高电平工作,低电平停止CSN = 1; /SPI操作高电平允许,低电平禁止SCK = 0; /时钟拉低,禁止读写寄存器IRQ = 1; /中断复位,等待产生中断信号NRF24L01_write_reg

16、(WRITE_REG + EN_AA, 0x3f); /所有接受通道允许自动应答NRF24L01_write_reg(WRITE_REG + EN_RXADDR, 0x3f); /接收通道全部打开NRF24L01_write_reg(WRITE_REG + SETUP_AW, 0x03); /设置接收/发射地址宽度为 5字节NRF24L01_write_reg(WRITE_REG + SETUP_RETR, Data_rt); /自动发送间隔250+86us,次数 15NRF24L01_write_reg(WRITE_REG + RF_CH, 0x00); /设置信道工作为 2.4Ghz,收发

17、必须一致NRF24L01_write_reg(WRITE_REG + RX_PW_P0, Data_width); /设置通道 0数据字节数NRF24L01_write_reg(WRITE_REG + RX_PW_P1, Data_width); /设置通道 1数据字节数NRF24L01_write_reg(WRITE_REG + RX_PW_P2, Data_width); /设置通道 2数据字节数NRF24L01_write_reg(WRITE_REG + RX_PW_P3, Data_width); /设置通道 3数据字节数NRF24L01_write_reg(WRITE_REG + R

18、X_PW_P4, Data_width); /设置通道 4数据字节数NRF24L01_write_reg(WRITE_REG + RX_PW_P5, Data_width); /设置通道 5数据字节数NRF24L01_write_reg(WRITE_REG + RF_SETUP, 0x0f); /发送速率为1Mhz,发送功率最大值 0dbNRF24L01_write_buf(WRITE_REG + TX_ADDR,TX_ADDRESS,5); /写本机地地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P0,RX_ADDRESS_P0,5); /写数据通道 0接

19、收机地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P1,RX_ADDRESS_P1,5); /写数据通道 1接收机地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P2,RX_ADDRESS_P2,1); /写数据通道 2接收机地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P3,RX_ADDRESS_P3,1); /写数据通道 3接收机地址NRF24L01_write_buf(WRITE_REG + RX_ADDR_P4,RX_ADDRESS_P4,1); /写数据通道 4接收机地址NRF2

20、4L01_write_buf(WRITE_REG + RX_ADDR_P5,RX_ADDRESS_P5,1); /写数据通道 5接收机地址 void RX_MODE()NRF24L01_write_reg(WRITE_REG + CONFIG, 0x0f);/IRQ收发完成中断响应,16 位CRC,接收模式 CE = 1;void TX_MODE()NRF24L01_write_reg(WRITE_REG + CONFIG, 0x0e);/IRQ收发完成中断响应,16 位CRC,发送模式CE = 1;uchar TX_packet(uchar *tx_buf)uchar tx_flag = 1

21、;CE = 0; /停止射频电路工作NRF24L01_write_reg(WRITE_REG + STATUS,0xff); /清除中断标志位NRF24L01_write_buf(WR_TX_PLOAD,tx_buf,Data_width); /装载要发送的数据CE = 1; /置高 CE,激发数据发送Delay_ms(Data_rt/2); if(NRF24L01_read_reg(STATUS)return(tx_flag); uchar RX_packet(uchar *rx_buf)uchar revalue = 0,sta;sta = NRF24L01_read_reg(STATUS); /读状态寄存器if(sta /SPI使能NRF24L01_read_buf(RD_RX_PLOAD,rx_buf,Data_width); /读取数据revalue = 1; /读取数据完成标志置 1NRF24L01_write_reg(WRITE_REG + STATUS,0xff); /清除中断标志位CE = 1;return revalue;/返回读取数据完成标志

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报