基于24l01的无线话筒通信模块24l01 如何使用

查看: 4478|回复: 19
NRF24L01使用方法
本帖最后由 ye955 于
15:07 编辑
NRF24L01使用方法
一、& & & & 模块引脚
二、& & & & 电路原理图
三、& & & & 操作流程
单片机需预留5个或6个端口给模块使用。分别为CE、CSN、SCK、MOSI、MISO、IRQ。
CE: 芯片的模式控制线。在 CSN 为低的情况下,CE协同NRF24L01的CONFIG 寄存器共同决定NRF24L01的状态
CSN:芯片的片选线,CSN 为低电平芯片工作。
SCK:芯片控制的时钟线(SPI 时钟)
MOSI:芯片控制数据线(Master output slave input 主机出从机入)
MISO:芯片控制数据线(Master input slave output 主机入从机出)
IRQ:中断信号。无线通信过程中MCU 主要是通过IRQ 与NRF24L01 进行通信。(可省略)
1)写Tx 节点的地址 TX_ADDR
2)写Rx 节点的地址(主要是为了使能Auto Ack) RX_ADDR_P0
3)写入需发送的数据 TxDate
4)使能AUTO ACK EN_AA
5)使能PIPE 0 EN_RXADDR
6)配置自动重发次数 SETUP_RETR
7)选择通信频率 RF_CH
8)配置发射参数(低噪放大器增益、发射功率、无线速率) RF_SETUP
9) 选择通道0 有效数据宽度 Rx_Pw_P0
10)配置24L01 的基本参数以及切换工作模式 CONFIG。
void NRFSetTxMode(uchar *TxDate)
{&&//发送模式
& & CE=0;& &
& & NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);//写寄存器指令+P0地址使能指令+发送地址+地址宽度
& & NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);//为了应答接收设备,接收通道0地址和发送地址相同
& & NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);//写入数据& &'TX_DATA_WITDH'为数据长度
& & /******下面有关寄存器配置**************/
& & NRFWriteReg(W_REGISTER+EN_AA,0x01);& && &&&// 使能接收通道0自动应答
& & NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);&&// 使能接收通道0
& & NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a);&&// 自动重发延时等待250us+86us,自动重发10次
& & NRFWriteReg(W_REGISTER+RF_CH,0x40);& && &&&// 选择射频通道0x40
& & NRFWriteReg(W_REGISTER+RF_SETUP,0x07);& &&&// 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
& & NRFWriteReg(W_REGISTER+CONFIG,0x0e);& && & // CRC使能,16位CRC校验,上电& & & &
& & CE=1;& & & &
& & delayms(5);//NRFDelay(5);//保持10us秒以上
初始化步骤 24L01 相关寄存器
1)写Rx 节点的地址 RX_ADDR_P0
2)使能AUTO ACK EN_AA
3)使能PIPE 0 EN_RXADDR
4)选择通信频率 RF_CH
5) 选择通道0 有效数据宽度 Rx_Pw_P0
6)配置发射参数(低噪放大器增益、发射功率、无线速率) RF_SETUP
7)配置24L01 的基本参数以及切换工作模式 CONFIG。
void NRFSetRXMode()
& & NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);&&// 接收设备接收通道0使用和发送设备相同的发送地址
& & NRFWriteReg(W_REGISTER+EN_AA,0x01);& && && && && && &// 使能接收通道0自动应答
& & NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);& && && && &// 使能接收通道0
& & NRFWriteReg(W_REGISTER+RF_CH,0x40);& && && && && && &// 选择射频通道0x40
& & NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH);&&// 接收通道0选择和发送通道相同有效数据宽度
& & NRFWriteReg(W_REGISTER+RF_SETUP,0x07);& && && && && &// 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
& & NRFWriteReg(W_REGISTER+CONFIG,0x0f);& && && && && &&&// CRC使能,16位CRC校验,上电,接收模式& &&&
& & CE = 1;
& & delayms(1);//NRFDelay(5);& &
四、& & & & 程序说明
& & PD3--20脚--CE----模块芯片开启信号 激活RX或TX& &&&单片机输出
& & PD2--19脚--CSN---模块SPI片选信号& && && && && &&&单片机输出
& & PC7--17脚--SCK---模块SPI时钟信号& && && && && &&&单片机输出
& & PC6--16脚--MOSI--模块SPI输入信号& && && && && &&&单片机输出
& & PC5--15脚--MISO--模块SPI输出信号& && && && && &&&单片机输入
& & PC4--14脚--IRQ---模块可屏蔽中断信号 低电平有效& &单片机输入
#include &NRF_2401C.h&& & & &
#include &delay.h&
uchar RevTempDate[5];//最后一位用来存放结束标志
uchar&&TxAddr[]={0x34,0x43,0x10,0x10,0x02};//发送地址
/*****************状态标志*****************************************/
uchar& && &//状态标志
//RX_DR=sta^6;
//TX_DS=sta^5;& &&&PLC_BitState.BitState0.Bit.M4=1;
//MAX_RT=sta^4;
struct&&PLC_BITSTATE& && && && && && &
{ //--------------------------------------------
& & & & union&&BITSTATE0
& & & & & & & &
& & & & & & & & struct BIT00
& & & & & & & & {
& & & & & & & && &uchar M0:1;//
& & & & & & & && &uchar M1:1;//
& & & & & & & && &uchar M2:1;//
& & & & & & & && &uchar M3:1;//
& & & & & & & && &uchar MAX_RT:1;&&//不成功返回ACK信号,此为1.不成功为0
& & & & & & & && &uchar TX_DS:1;& & //成功返回ACK信号,此为1.不成功为0
& & & & & & & && &uchar RX_DR:1; //
& & & & & & & && &uchar M7:1;& & //
& & & & & & & & }B
& & & & }BitState0;
/*****************SPI时序函数******************************************/
uchar NRFSPI(uchar date)
/**********************NRF24L01初始化函数*******************************/
void NRF24L01Int()
/*****************SPI读寄存器一字节函数*********************************/
uchar NRFReadReg(uchar RegAddr)
/*****************SPI写寄存器一字节函数*********************************/
uchar NRFWriteReg(uchar RegAddr,uchar date)
/*****************SPI读取RXFIFO寄存器的值********************************/
uchar NRFReadRxDate(uchar RegAddr,uchar *RxDate,uchar DateLen)
/*****************SPI写入TXFIFO寄存器的值**********************************/
uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen)
/*****************NRF设置为发送模式并发送数据******************************/
void NRFSetTxMode(uchar *TxDate)
/*****************NRF设置为接收模式并接收数据******************************/
//接收模式
void NRFSetRXMode()
/****************************检测是否有接收到数据******************************/
uchar&&CheckACK()
/******************判断是否接收收到数据,接到就从RX取出*********************/
//用于接收模式
uchar NRFRevDate(uchar *RevDate)
/***********端口配置******************/
void IO_config(void)
1、需要发射调用:NRFSetTxMode(TxDate1);//发送数组1& &(其中TxDate1为存放所发的数据)
& && && && && &&&while(CheckACK());& & & & //检测是否发送完毕
void NRFSetTxMode(uchar *TxDate)调用到:
uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen)&&写寄存器TXFIFO
uchar NRFWriteReg(uchar RegAddr,uchar date)&&写寄存器配置
& & PD3--20脚--CE----模块芯片开启信号 激活RX或TX& && &单片机输出
& & PD2--19脚--CSN---模块SPI片选信号& && && && && && & 单片机输出
& & PC7--17脚--SCK---模块SPI时钟信号& && && && && && & 单片机输出
& & PC6--16脚--MOSI--模块SPI输入信号& && && && && && & 单片机输出
& & PC5--15脚--MISO--模块SPI输出信号& && && && && && & 单片机输入
& & PC4--14脚--IRQ---模块可屏蔽中断信号 低电平有效& && & 单片机输入
#include &NRF_2401C.h&& & & &
#include &delay.h&
uchar RevTempDate[5];//最后一位用来存放结束标志
uchar&&TxAddr[]={0x34,0x43,0x10,0x10,0x02};//发送地址
/*****************状态标志*****************************************/
uchar& && &//状态标志
//RX_DR=sta^6;
//TX_DS=sta^5;& &&&PLC_BitState.BitState0.Bit.M4=1;
//MAX_RT=sta^4;
struct&&PLC_BITSTATE& && && && && && &
{ //--------------------------------------------
& & & & union&&BITSTATE0
& & & & & & & &
& & & & & & & & struct BIT00
& & & & & & & & {
& & & & & & & && &uchar M0:1;//
& & & & & & & && &uchar M1:1;//
& & & & & & & && &uchar M2:1;//
& & & & & & & && &uchar M3:1;//
& & & & & & & && &uchar MAX_RT:1;//
& & & & & & & && &uchar TX_DS:1;//
& & & & & & & && &uchar RX_DR:1;//
& & & & & & & && &uchar M7:1;//
& & & & & & & & }B
& & & & }BitState0;
/*****************SPI时序函数******************************************/
uchar NRFSPI(uchar date)
/**********************NRF24L01初始化函数*******************************/
void NRF24L01Int()
/*****************SPI读寄存器一字节函数*********************************/
uchar NRFReadReg(uchar RegAddr)
/*****************SPI写寄存器一字节函数*********************************/
uchar NRFWriteReg(uchar RegAddr,uchar date)
/*****************SPI读取RXFIFO寄存器的值********************************/
uchar NRFReadRxDate(uchar RegAddr,uchar *RxDate,uchar DateLen)
/*****************SPI写入TXFIFO寄存器的值**********************************/
uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen)
{ //寄存器地址//写入数据存放变量//读取数据长度//用于发送
/*****************NRF设置为发送模式并发送数据******************************/
void NRFSetTxMode(uchar *TxDate)
/*****************NRF设置为接收模式并接收数据******************************/
//接收模式
void NRFSetRXMode()
/****************************检测是否有接收到数据******************************/
void&&CheckACK()
{&&//用于发射模式接收应答信号
/******************判断是否接收收到数据,接到就从RX取出*********************/
//用于接收模式
uchar NRFRevDate(uchar *RevDate)
/***********端口配置******************/
void IO_config(void)
&&GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);&&//PB7高速推挽输出高电平--CE&&HIGH
&&GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);&&//PB6高速推挽输出高电平--CSN(片选)
&&GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST);&&//PB5高速推挽输出高电平--SCK(时钟)
&&GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST);&&//PB4高速推挽输出低电平--MOSI(数据输出)
&&GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);& && &//PB3上拉输入无中断--MISO(数据输入)
&&GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT) ;& &&&//PB2上拉输入无中断--IRQ
//===============================================================================
/*************************接收数据*********************************************/
void GetDate()& & & & & & & & & & & & & & & &&&
{ //接收到的数据放在:RevTempDate[0],RevTempDate[1],RevTempDate[2],RevTempDate[3]中.
1、主程序循环一直调用:NRFSetRXMode();//设置为接收模式
& && && && && && && &&&GetDate();//开始接受数
& && && && && && && &&&if(RevTempDate[0]==9) {LED2=0;}& &// RevTempDate[0]为所收到的数据
void NRFSetRXMode()里面调用到:
uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen)&&写寄存器TXFIFO
uchar NRFWriteReg(uchar RegAddr,uchar date)&&写寄存器配置
GetDate();里面调用到:
五、& & & &
本帖子中包含更多资源
才可以下载或查看,没有帐号?
顶& && && && &
沙发& && && && && &
公益广告:本论坛不得使用、宣传Q群。 有讨论请在论坛里进行。 违者将封锁ID.
mark?nnnnaaa
公益广告:发表招聘帖子需要缴费,有需要可以联系网站工作人员王小姐:.
为啥附件不能下载呢?不过还是感谢楼主分享
公益广告:广告只能发在本论坛的广告区,否则将封锁ID。
亲,不能下载啊
大家可以参考下这个:
mark& && && && && && && && && && &
楼主能不能介绍个组网的方法。
mark 下 24l01
请问大神nRF24L01从机接收数据通道有效宽度是不是必须与主机发送的数据包的宽度相同?
mark?王王王王
IRQ:中断信号
PC4--14脚--IRQ---模块可屏蔽中断信号 低电平有效& && & 单片机输入
您是用的查询标志位&&而不是用的中断吗?
查询标志位代码& &是指MCU一直盯着查询标志位,不能去做别的事情吗?
本帖子中包含更多资源
才可以下载或查看,没有帐号?
顶,谢谢分享
我就是用软查询的,主循环里加一条查询就好了,可以省引脚
我在考虑,有无基于操作系统比如Ucos-ii等开发的驱动呢,熟读手册中
这个今年比赛也许会用到,先下载了,
不错,留个记号备用。。。
楼主写得很详细,辛苦了。用NRF24L01,玩过很多东西
阿莫电子论坛, 原"中国电子开发网"所属子分类:
注册时间: 19:55
论坛积分:11
我用的是基于f103rb的最小系统板,借用了mini战舰开发板的无线通信实验模版,用了两块24l01无线模块,想要实现pc和arm之间的通信,两个收发地址都设置成相同的,但是收发总是不成功(用51能实现和pc的互通,所以pc上的配置应该没问题)
24l01和f103rb之间的连线是不是
PA4-CE,PC4,CSN,PC5-IRQ,PA5-SCK,PA6-MISO,PA7-MOSI&&&&??
在nrf24l01.c里面初始化了PA2、PA3,并且都设置高电平,这两个管脚有什么特殊作用么??
请大神们详细讲解下,是否在mini战舰开发板上有什么特殊的连线而我这边没有连的,或者说是我的接线接错了?
在最小系统板上应用,程序该进行怎样的改动??
推荐参考答案
注册时间: 20:48
回复数: 2272
主题数: 25
论坛积分:2747
来自: 广州
连线没有错,24L01使用的是SPI1,而SPI1也被SD卡和FLASH使用。所以在使用24L01是要关闭这两个的片选信号,也就是PA2,PA3置高。你先读取一下24L01的内部寄存器看能不能读取。如果能读取就说明SPI没有问题,然后再仔细看一下配置有没有问题
开往春天的手扶拖拉机
注册时间: 10:41
回复数: 67430
主题数: 400
酷贴数:28
论坛积分:71430
来自: 湖南
Mini板V2.0是这么接线的,V3.0有小改。
PA2,PA3输出高,是防止SD卡、W25QXX对NRF的通信造成干扰,因为这个SPI1,是这三个器件公用的,同一时刻必须只能有1个在使用。
我的淘宝小店:
注册时间: 19:55
论坛积分:11
回复【2楼】&正点原子&:
---------------------------------
也就是在空板上不需要考虑PA2和PA3?
现在自检能通过,发送也能通过
while(!(NRF24L01_TxPacket(tmp_buf)==TX_OK));//能够执行到下一步不会卡死在这里
但问题是pc上的串口调试小助手就是没有收到数据
对发送的数据有什么要求么??
注册时间: 10:41
回复数: 67430
主题数: 400
酷贴数:28
论坛积分:71430
来自: 湖南
回复【3楼】&leilei4908&:
---------------------------------
&是的。
我们的例程是要2个NRF互发数据的,和PC没什么直接联系。
你自己改的代码,就得自己分析了。
我的淘宝小店:
请选择一个版面...
STM32-F0/F1/F2专区
STM32-F3/F4/F7专区
MSP430专区
ARM7/ARM9/ARM11专区
其他Cortex系列
uCOS & uCGUI & Emwin
trochili(飞鸟)操作系统
中国RTOS联盟
FPGA/CPLD/DSP专区
数字,模拟,高频电路
编程语言学习
蓝牙/WIFI/Zigbee通信
开发工具专栏
UOL 单片机语言
四轴飞行器
MICO智能硬件
DIY大赛专区
DIY项目资料专区
论坛建设区
二手交易专栏
& 开源电子网() |快速注册成为生意地用户
请输入密码
生意地会员登录
请输入密码
原装正品 NRF24L01+ 无线模块 2.4G无线通信模块 2.54mm接口
价格 面议 起批量 面议
品牌:N/A型号:原装正品NRF24L01+无线模块2.4G无线通信模块2.54mm接口类型:其他IC封装:1功率:1批号:
标价为单个价格,一般两个配对使用。玩无线模块,请具备一定知识,懂用才买,不提供技术支持,请慎重购买。&XL24L01P-D01是采用挪威NORDIC公司的nrf24L01p&2.4G无线收发IC设计的一款高性能2.4G无线收发模块,采用GFSK调制,工作在M的国际通用ISM频段,最高调制速率可达2MBPS。XL24L01P-D01集成了所有与RF协议相关的高速信号处理部分,如:自动重发丢失数据包和自动产生应答信号等,模块的SPI接口可以利用单片机的硬件SPI口连接或用单片机的I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。&模块大小32*15.2mm,2.54mm间距的双排插针接口,使用内置PCB天线设计,开阔地1MBPS速率下,收发10个字节的数据量测试距离最远约70米左?摇?特性l&工作频率&M,共125个工作频道,&符合国际通用ISM法规,l&FSK/GSK调制l&支持2M的高速数据传输,减少发射时间,降低平均功耗。l&当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了平均功耗收l&自动重发功能,自动检查和重发丢失的数据包,重发时间及重发次数可软件控制l&自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程l&内置硬件CRC检错和点对多点通信地址控制l&数据包传输错误计数器及载波检测功能可用于跳频设置l&可同时设置六路接收通道地址,可选择性的打开接收通道l&自动存储未收到的应答信号的数据包&&&&&&&2.2&应用范围²&无线遥控²&机器人控制²&家庭自动化²&智能玩具²&游戏无线控制器²&无线传感器²&无线语音
同类商品推荐
您是不是在找
联系人:洪泽鑫
认证:未认证
所在地区:深圳市福田区
报警器IC市场
您是不是在找
给卖家留言
您的姓名:
请填写您的姓名
联系电话:
请填写常用电话号码,以便我们能联系到您。
留言内容:
请写下您的问题,我们会第一时间联系您。在nRF24L01无线通信模块中工作通道频率RF_CH设置为40是什么意思?-中国学网-中国IT综合门户网站
> 在nRF24L01无线通信模块中工作通道频率RF_CH设置为40是什么意思?
在nRF24L01无线通信模块中工作通道频率RF_CH设置为40是什么意思?
转载 编辑:李强
为了帮助网友解决“在nRF24L01无线通信模块中工作通道”相关的问题,中国学网通过互联网对“在nRF24L01无线通信模块中工作通道”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:在nRF24L01无线通信模块中工作通道频率RF_CH设置为40是什么意思?,具体解决方案如下:解决方案1: RF-CH共包括六位,这六位决定了不同的工作方式频率,nRF24L01无线通信模块中工作通道频率由RF-CH寄存器的内容确定,可由以下公式计算得出:Fo=(2400+RF-CH)MHz.扩展:射频频道的频率决定射频收/发所使用频道的中心频率,在速率为250Kbps或1Mbps时,频道占用的带宽小于1M,而在速率为2Mbps时,所占宽带小于2M,射频收发器工作的频率范围从2.400-2.525GHz,无线频道设置的频率分辨率为1MHz。由于在2Mbps通信速率时,占用宽带为超过频道分辨率,为了确保在2Mbps速率下不出现重叠,频道间隔必须设定为2M或更宽一些,250Kbps或1Mbps速率下占用宽带等于或低于频道分辨率。无线频率由RF-CH寄存器的内容确定,可由以下公式计算得出:Fo=(2400+RF-CH)MHz为确保相互通信,发射器和接收器须编程为同一个频率通过对数据库的索引,我们还为您准备了:RF-CH共包括六位,这六位决定了不同的工作方式频率,nRF24L01无线通信模块中工作通道频率由RF-CH寄存器的内容确定,可由以下公式计算得出:Fo=(2400+RF-CH)MHz. 扩展...===========================================nrf24l01无线通信模块中工作通道频率由rf-ch寄存器的内容确定,可由以下公式计算得出:fo=(2400+rf-ch)mhz.& 扩展:射频频道的频率决定射频收/发所使用频道的中心频率,在...===========================================竟然设置成功也能与接收端通信了,显然,SCK需要一个下拉电阻,接上下拉电阻后就成功... 希望对你有用! 多上网搜索一下关于调试nrf24l01的失败教训,在实际的调试过程中多注意...===========================================通信的,你只有把数据用SPI的方式,发给NRF2401,它会帮你用无线的形式发出去的,接收... 在理论阶段,我可以给你点nrf24L01的,可能有点不同,但基本应该是类似的。 哦,是nrf401...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助

我要回帖

更多关于 24l01无线模块 的文章

 

随机推荐