文档介绍:Nrf24l01使用心得
使用nrf24l01+也有一段时间了,期间老是出现各种问题,总结一下,其实就是引脚分配问题、电压提供问题以及最重要的程序问题。
关于引脚分配,刚开始我老是在纠结这个IRQ引脚到底应不应该连接到MCU的外部中断引脚,后来经实践证明,是不用的,这当然也给我们PCB布线时提供了方便,引脚随便分配,只要模拟出的SPI通信协议正确就行。
电压的提供,nrf24L01(+),这个可以用AMS1117-,说明书上说串接一个2K左右的电阻,我试过,这种方法不怎么好。
最重要的程序问题,其实对于不研究无线通信的人来说,知道它怎么用就行了,因为上面的寄存器实在是太多了,记不住。这些程序网上也有很多(看多了就会发现都是一样的,只不过是使用的方法不一样罢了,主题还是一样),先上程序,再说其中应该注意的点。我是用模块化编程的方法实现的,MCU使用的是STC89C52RC.
程序如下:
C文件:
#include<>
#include<>
typedef unsigned char uchar;
typedef unsigned int uint;
//****************************************NRF24L01端口定义***************************************
sbit MISO =P2^3;
sbit MOSI =P2^1;
sbit SCK =P2^4;
sbit CE =P2^5;
sbit CSN =P2^0;
sbit IRQ =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 payload
uchar 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 // 读取接收数据指令
#d