nrf24l01使用心得

上传人:第*** 文档编号:31313678 上传时间:2018-02-06 格式:DOCX 页数:8 大小:21.33KB
返回 下载 相关 举报
nrf24l01使用心得_第1页
第1页 / 共8页
nrf24l01使用心得_第2页
第2页 / 共8页
nrf24l01使用心得_第3页
第3页 / 共8页
nrf24l01使用心得_第4页
第4页 / 共8页
nrf24l01使用心得_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《nrf24l01使用心得》由会员分享,可在线阅读,更多相关《nrf24l01使用心得(8页珍藏版)》请在金锄头文库上搜索。

1、Nrf24l01 使用心得使用 nrf24l01+也有一段时间了,期间老是出现各种问题,总结一下,其实就是引脚分配问题、电压提供问题以及最重要的程序问题。1. 关于引脚分配,刚开始我老是在纠结这个 IRQ 引脚到底应不应该连接到 MCU 的外部中断引脚,后来经实践证明,是不用的,这当然也给我们 PCB 布线时提供了方便,引脚随便分配,只要模拟出的 SPI 通信协议正确就行。2. 电压的提供,nrf24L01(+)需要的是 3.3V 电压,这个可以用 AMS1117-3.3 来转换然后提供,说明书上说串接一个 2K 左右的电阻,我试过,这种方法不怎么好。3. 最重要的程序问题,其实对于不研究无线

2、通信的人来说,知道它怎么用就行了,因为上面的寄存器实在是太多了,记不住。这些程序网上也有很多(看多了就会发现都是一样的,只不过是使用的方法不一样罢了,主题还是一样) ,先上程序,再说其中应该注意的点。我是用模块化编程的方法实现的,MCU 使用的是STC89C52RC.程序如下:C 文件:Nrf24l01.c#include#includetypedef unsigned char uchar;typedef unsigned int uint;/*NRF24L01 端口定义*sbit MISO =P23;sbit MOSI =P21;sbit SCK =P24;sbit CE =P25;sbi

3、t CSN =P20;sbit IRQ =P22;/*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_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /本地地址uchar c

4、onst RX_ADDRESSRX_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 0x

5、E3 / 定义重复装载数据指令#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

6、STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送监测功能#define CD 0x09 / 地址检测 #define RX_ADDR_P0 0x0A / 频道 0 接收数据地址#define RX_ADDR_P1 0x0B / 频道 1 接收数据地址#define RX_ADDR_P2 0x0C / 频道 2 接收数据地址#define RX_ADDR_P3 0x0D / 频道 3 接收数据地址#define RX_ADDR_P4 0x0E / 频道 4 接收数据地址#define RX_ADDR_P5 0x0F / 频道 5 接收数据地址#def

7、ine TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 接收频道 0 接收数据长度#define RX_PW_P1 0x12 / 接收频道 1 接收数据长度#define RX_PW_P2 0x13 / 接收频道 2 接收数据长度#define RX_PW_P3 0x14 / 接收频道 3 接收数据长度#define RX_PW_P4 0x15 / 接收频道 4 接收数据长度#define RX_PW_P5 0x16 / 接收频道 5 接收数据长度#define FIFO_STATUS 0x17 / FIFO 栈入栈出状态寄存器设置/*void De

8、lay_nrf(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uchar SPI_RW(uint uchar);uchar SPI_Read(uchar reg);void SetRX_Mode(void);uchar SPI_RW_Reg(uchar reg, uchar value);uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uchar SPI_Write_Buf(uchar reg, uchar *pBuf, u

9、char uchars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/*长延时*void Delay_nrf(unsigned int s)unsigned int i;for(i=0; i0;n-)_nop_();/*/*NRF24L01 初始化/*/void init_NRF24L01(void)inerDelay_us(100);CE=0; / chip enableCSN=1; / Spi disable SCK=0; / S

10、PI_Write_Buf(WRITE_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,如果需要多频道可以参考 Page21 SPI_RW_Reg(WRITE_REG + RF_CH,

11、 0); / 设置信道工作为 2.4GHZ,收发必须一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为 32 字节SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为 1MHZ,发射功率为最大值 0dB/*/*函数:uint SPI_RW(uint uchar)/*功能:NRF24L01 的 SPI 写时序/*/uchar SPI_RW(uint uchar)uint bit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bitMOSI = (uchar / output uchar, MSB to MOSIuchar = (uchar 1); / shift next bit into MSB.SCK = 1; / Set SCK high.uchar |= MISO; / capture current MISO bitSCK = 0; / .then set SCK low againreturn(uchar); / return read uchar/*/*函数:uchar

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号