已阅读5页,还剩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_Reg(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个字节的地址(同上) 频道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_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#define 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 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 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 register 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 / 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 width, 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 0x16 / RX payload width, pipe5 register address#define FIFO_STATUS 0x17 / FIFO Status Register register address/*/#endif/*程序*/#include#includedefine.h#includeDELAY.h#includeNRF24L01.huchar 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;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 = (dat&0x80);dat = 1;SCK = 1;dat |= MISO; SCK = 0;return dat;uchar NRF24L01_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(value);/写寄存器值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 *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(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,收发必须一致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 + RX_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接收机地址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接收机地址NRF24L01_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()NRF24L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农村集体产权制度改革政策执行偏差纠正考核试卷
- 2025年金融科技行业区块链与人工智能融合应用研究报告及未来发展趋势预测
- 2025年化妆品行业社交化营销策略研究报告及未来发展趋势预测
- 2025年乡村医生《国家基本公共卫生服务规范》老年人健康管理新增指标操作规范考核试卷
- 2025年赣州市章贡区招聘区教育体育局下属事业单位体育类特殊专业技术人才2人笔试考试备考试题及答案解析
- 2025丹阳农商银行常态化社会招聘21人笔试考试参考题库及答案解析
- 2025广东佛山市顺德区教育局面向2026届毕业生赴高校设点招聘教师(第一批)434人考试笔试备考试题及答案解析
- 2026西北有色地矿集团招聘计划(110人)考试笔试模拟试题及答案解析
- 2025浙江绍兴市中等专业学校合同制人员招聘2人笔试考试参考试题及答案解析
- 2025云南楚雄州元谋县县级事业单位选调19人笔试考试备考试题及答案解析
- 矿山隐蔽致灾因素普查规范讲解
- 基于碳基纳米材料的铅蓄电池电极性能优化与调控-洞察及研究
- 2025年“才聚齐鲁成就未来”山东钢铁集团有限公司社会招聘13人笔试历年参考题库附带答案详解
- 2025年新三类人员安全员c证继续教育考试题库及答案
- 2025浙江台州市信保基金融资担保有限责任公司招聘10人笔试历年参考题库附带答案详解
- 企业危机管理中的社会责任与可持续发展研究-洞察及研究
- 幼儿园童话故事表演《丑小鸭》课件
- 2025年风力发电机叶片维护与性能提升可行性分析报告
- 村干部考入事业编面试真题(含答案)
- 西南交通大学2025年秋季管理岗位与其他专技岗位公开招聘考试参考试题及答案解析
- 2025年陕西省招聘村居后备干部考试应知应会题库及答案
评论
0/150
提交评论