文档详情

Nrf24l01使用心得.docx

发布:2017-05-24约1.03万字共8页下载文档
文本预览下载声明
Nrf24l01使用心得使用nrf24l01+也有一段时间了,期间老是出现各种问题,总结一下,其实就是引脚分配问题、电压提供问题以及最重要的程序问题。关于引脚分配,刚开始我老是在纠结这个IRQ引脚到底应不应该连接到MCU的外部中断引脚,后来经实践证明,是不用的,这当然也给我们PCB布线时提供了方便,引脚随便分配,只要模拟出的SPI通信协议正确就行。电压的提供,nrf24L01(+)需要的是3.3V电压,这个可以用AMS1117-3.3来转换然后提供,说明书上说串接一个2K左右的电阻,我试过,这种方法不怎么好。最重要的程序问题,其实对于不研究无线通信的人来说,知道它怎么用就行了,因为上面的寄存器实在是太多了,记不住。这些程序网上也有很多(看多了就会发现都是一样的,只不过是使用的方法不一样罢了,主题还是一样),先上程序,再说其中应该注意的点。我是用模块化编程的方法实现的,MCU使用的是STC89C52RC.程序如下:C文件:Nrf24l01.c#includereg52.h#includeintrins.htypedef unsigned char uchar;typedef unsigned intuint;//****************************************NRF24L01端口定义***************************************sbitMISO=P2^3;sbitMOSI=P2^1;sbitSCK =P2^4;sbitCE =P2^5;sbitCSN=P2^0;sbitIRQ=P2^2;//*********************************************NRF24L01*************************************#define TX_ADR_WIDTH 5 // 5 uints TX address width#define RX_ADR_WIDTH 5 // 5 uints RX address width#define TX_PLOAD_WIDTH 3// 20 uints TX payload#define RX_PLOAD_WIDTH 3// 20 uints TX payloaduchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//本地地址uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//接收地址//***************************************NRF24L01寄存器指令*******************************************************#define READ_REG 0x00 // 读寄存器指令#define WRITE_REG 0x20 // 写寄存器指令#define RD_RX_PLOAD 0x61 // 读取接收数据指令#define WR_TX_PLOAD 0xA0 // 写待发数据指令#define FLUSH_TX 0xE1 // 冲洗发送 FIFO指令#define FLUSH_RX 0xE2 // 冲洗接收 FIFO指令#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令#define NOP 0xFF // 保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01 // 自动应答功能设置#define EN_RXADDR 0x02 // 可用信道设置#define SETUP_AW 0x03 // 收发地址宽度设置#define SETUP_RETR 0x04 // 自动重发功能设置#define RF_CH 0x05 // 工作频率设置#define RF_SETUP 0x06 // 发射速率、功耗功能设置#define STATUS 0x07
显示全部
相似文档