nRF24L01单片机通信的总结--看了就会用了

发布者:colchery最新更新时间:2019-10-30 来源: 51hei关键字:nRF24L01  单片机  通信的 手机看文章 扫描二维码
随时随地手机看文章

1周时间,我从一个没用过STC单片机,不知道什么叫SPI接口的“文盲”,把nRF24L01的整个通信过程弄到完全没有bug.。兴奋之余来小屁一下。给那些正在奋斗着这个牛逼的芯片的小牛们小炫一下。希望有所帮助。屁话少说。正题:


基本的东西我理解了,那就是:1.用5根线的SPI接口向2401发送数据或指令。2.芯片在每次上电的时候都需要进行一番配置。这些配置数据,就是所谓的指令了。3.配置完成后知道芯片处在哪个模式。并且知道它将要转向哪个模式。4.通讯协议。5.观察现象。


好了,小牛们一定急切想知道自己的程序问题出在哪里了,再小白一点的一定想急切的知道如何配置才能让它工作。更小白一点的一定想知道这个芯片的各个模式之间是怎么联系的。又是如何进行相互转化的。别急,一个一个说。


要说什么最重要,你们不会想到其实是4.通讯协议。 


为什么呢,你们又知道在这里的通讯协议是作什么用的呢。 举个简单的例子,我刚开始设计的时候,一心想让一个作为发送模块,每隔一秒发送一次数据,而另一个则作为接收模块,不间断的检测收到数据没有。 这就是一个简单的通讯协议,它是我们的目标。是我们的方向。当然真正的通讯协议绝对不会这么简单的几句话。它告诉你,你理想中的模块应该充当什么角色。是接收?是发送?还是接收完了马上发送。作为开发阶段,当然是越简单的协议,正确性就越容易验证,废话不说,那就按我说的“通讯协议”来设计吧。


先说发送模式吧。


要到发送模式,要经历几个变化。


第1,上电,上电完了芯片其实还是在powerDown模式,因为芯片为了省电,它需要通过软件来控制开机或关机。powerDown模式就是所谓的待机模式了。这个模式理所当然是最省电的。它除了省电以外还能干吗呢?配置!对最重要的配置。就是可以通过 SPI口向它发送数据,它是可以接收到的,并且可以正确写入到指定的寄存器中的。一般我们在初始化中一开始就可以配置了,而此时芯片正是处在这个模式。


第2.我们的目标是要把它配置的能发送出去数据,而且能被目标设备正确接收。所以这中间涉及的寄存器(当然是2401里自带的寄存器区了)有:


1@发送到的目标地址。 说地址其实是虚的,它就相当于一个钥匙和一把锁一样。当你在接收设备里边规定了一个地址以后,那么接收到的数据只有带了这个地址的包才会被正确接收。所以说这里的发送目标地址就是接收设备里的本机地址。只要设计时两个地址相同,就不会接收不到。


2@接收到的地址。 这个名字起的不是很好哈,有点误导人。说白了就是一个本机地址了。在纯发射机里,它并不是必要的。因为它从来不接收数据~~~这里写上,是因为:发射模式还有个东西,就是自动应答功能,(当然也是通过配置才能启用的,不配置则不会自动应答,也就不需要知道本机地址了)。


3@说到自动应答,那就先说它吧。一般我们会想,发送出一帧数据后是不是应该等待另一方回应个数据呀?想法是好的,但我说了,有通讯协议在控制。因为我们这里只想设计成一直发送而不管对方是否收到。所以自动应答可以不去配置,让它开机默认即可。但实际上我们的通讯协议可能很复杂,肯定不会是一直在发送。并且,它发送完一帧后,确实应该转为接收模式来等待对方发送应答数据过来。我们人为的当然可以自己来个模式跳转,但是有自动应答了,也就是说,当你设定开启自动应答了,那么在它发送完一包数据后,芯片会立即转为接收模式了。 《在这里我也仍有一点没理解,就是,当它收到应答后会变成什么模式呢,是自动再回到发送模式还是停留在接收模式。》 


4@有自动应答了,那么就不能少了自动重发功能了。为什么呢。首先理解为什么会自动重发,就因为它处在自动应答模式时,通过接收数据来判定上次的数据是否有接收者成功接收了,就像我送出了一封信,如果你没有回信我是不是会想你可能没收到信,我需要再发一次。就是这个道理 。自动重发寄存器8位被分成两个4位的小区域,高4位存的是重发间隔时间,也就是说总共可以设定为16种不同的间隔,在这个间隔时间过后仍没有回应才再次重发。低4位好说,就是存一个最大重发次数。则最大可以设为15,即重发15次后仍然没回应那就不理你了,不再重发了。并且还会产生一个中断呢。最后再讲中断部分。 这里应该注意的是,当自动应答功能禁止时,就没有自动重发了,不管你设了重发多少次都不管用了。所以是互相影响的。还有就是重发次数设为0次,则相当于禁自动重发了,这不是显然的么。嘿嘿。


5@最基本的配置,,频率。这个芯片不光能以2.4Ghz的载波发射呢,它的带宽为2.4G----2.512G呢。这中间有一百多M的频带,可以划分成2M一个的信道。这个寄存器中的值就标明你想工作在哪个信道上啦,只有设置为同频的设备才能接收的到很容易理解吧。比如你设为10信道,则10*2=20M即发送时所用的载波频率就是2400+20=2420MHz。当然也只有设为2420M的接收设备才能接收的到了。


6@功率,数据速率。这是什么呢?原来2401里边也有自动增益控制部分,我们可以设定一个合适的功率来发射数据,第一可以在能耗上有利,另一方面对通信距离的控制也是很重要的。比如我只想在2米内能够通信,但2401最大的通信距离可以达到上百米,显然需要降发射功率来降低通信距离。可选的功率值有 0Dbm,-6dBm, -12dBm,-18dBm, 显然0在这里是最大的发射功率了。开发时尽可能设为0.如果设为0时,接收者都接收不到数据,那肯定是芯片坏了,就不用考虑降低功耗来通信了。这四档功率,通信距离从远到近,从几十米到几cm.并且在通信过程中还可以动态更改这个功率值,以达到最佳匹配的效果。数据速率是什么呢,刚开始我跟SPI接口的速率搞混了,想着,一个4M的单片机跟芯片通信速率怎么可能到这么高的。其实不是,这个速率就是加在载波上的数据的码率了。有两个可选值,1Mb/s,2Mb/s.也就是说,1秒钟能发送出去多少个高低电平


以上这些配置命令之后就可以通过简单的指令转向发送模式了。下面就看一下,配置的伪指令吧:


1. sendCommand(TxAddress_5) .因为地址是3到5字节可选的,这里选择了5字节的地址


2. sendCommand(LocalAddress_5),本机地址如果想要开启自动应答则必需与发射地址相同,即LocalAddress==TxAddress..不开启则不需要相等。


3. sendCommand(EnableAutoAck_0),因为芯片自带了6个通道,可以同时工作同时接收不同的数据,所以这里的自动应答也有相应的6个bit位来分别控制。这里只允许通道0自动应答。


4. sendCommand(EnableAutoTransmit) .只要上边一句配置开了自动应答,这句就应答生效。即自动重发.


5.  sendCommand(RF_CH). 这一句设置发射频率。即设定信道。一般默认的就是0信道了,也即2.4G的载波。


6.sendCommand(RF_Power). 设定发射速率,还有发射功率就设成0dBM吧。


以上这些是发射模式的必要配置了。如果不涉及接收,那么现在就可以转向发射模式。


7.sendCommand(Config); 通过 config寄存器中的开机控制位 powerup=1,转向空闲模式,config^0=0.转向发射模式。


8.sendCommand(TxBuffer);  填充发送数据到缓冲区里边。


8.CE=1;  这是一个引脚,用来控制从空闲模式向发送或接收模式跳转的.仅将相应位设为发送或接收模式不行,芯片现在只欠东风了,就是CE=1并保持最少10us时间后。就会开始发送数据了。


一个帧数据发送完成后会产生中断。这些中断是可以屏蔽的,就像单片机的中断允许控制一样。控制位在config寄存器中。


这里还可能产生另一个中断,就是重发次数达到上限了,你设了重发3次,那么重发3次以后还没收到应答就产生中断了。同样也是可屏蔽的。


下面说接收模式配置吧。


待续一下。


关键字:nRF24L01  单片机  通信的 引用地址:nRF24L01单片机通信的总结--看了就会用了

上一篇:L297A+L298N步进电机驱动板电路原理图PCB与单片机控制源程序
下一篇:单片机读写RC522射频卡上位机调试软件及参考例程

推荐阅读最新更新时间:2024-11-20 10:12

一个关于小程序与单片机通信实例(TCP/IP)
前言 这是一个18年初的创业项目的核心功能要求,我们当时打算做一个共享类的项目,项目的主题是共享图书,线下的形式租借图书,我们当时是考虑做一个借书柜的形式,然后线下生产投放借书柜,这些借书柜本身能存放24本书,大约24个柜子,且均有单片机控制。 用户通过扫码借书柜上的二维码,可以直接看到共享小程序里面的,针对这个借书柜的当前存在的图书,如果有用户喜欢的图书,那么用户可以直接点击小程序选择借书,那么这是小程序需要向后台发起API请求,由后台针对对应的借书柜的单片机进行通信,下发指令要求单片机打开对应该书的柜子。 大致步骤 后台构建 我选择用netty,当时使用的SSM的后台系统,不过最近一次整理我采用了SpringBoot
[单片机]
一个关于小程序与<font color='red'>单片机</font><font color='red'>的</font><font color='red'>通信</font>实例(TCP/IP)
什么是汽车微控制器?汽车MCU特点、分类及应用
随着智能汽车的发展,用户对汽车的安全性、稳定性、智能化不断提出更新的要求。车载各项功能的实现都需要复杂的芯片组和算法的稳定支持,MCU将发挥更大的作用。 什么是汽车微控制器? 汽车微控制器又称MCU,是汽车电气控制系统的核心部件。MCU必须具备良好的高温性能和稳定性,才能控制车内所有电子系统,包括多媒体、音响、导航、悬架等。与普通MCU相比,汽车MCU对品质要求更高,在复杂环境下不易损坏汽车的。一般来说,最重要的是可靠性和温度范围,民用级为0-70℃,工业级为20-85℃,汽车级为40-85℃。 MCU将成为“汽车大脑”的重要组成部分,是汽车的智能大脑,发挥着“思考、计算、控制”的核心功能。随着汽车电子电气架构向集中式演进,M
[嵌入式]
单片机进阶---HLK-W801硬件开发之优化PCB
目的 本来是一篇文章就想学会制作PCB,学会倒是学会了,但是感觉还是太像新手了,这可不好。 所以还是又花了两天,优化了一下这个PCB,现在把修改的技巧简单记录一下。 元件封装 按照原理图的器件,绘制好之后,才发现封装小的惊人,毕竟人家用贴片机生产,咱们这些小作坊,焊接个0402封装的,确实比较费眼睛,比大米粒还要小很多呢。 所以如果是手焊的话,尽量选择0805左右的封装大小。哎,我的第一块板的器件到了,一看大小,跟着就买了放大镜。 分层 前面的一章用的是4层板,那显然是有点奢侈了,光是打板的钱就要几百元,硬件就是省钱的关键,所以,改成双面板。第一次居然还没 有收费。有点小感动,不过商城的元器件倒是不便宜。人家一块开
[单片机]
<font color='red'>单片机</font>进阶---HLK-W801硬件开发之优化PCB
TMS320C3x DSP和PC机异步串行通信设计
  TMS320C3x DSP是目前国内应用比较广泛的DSP芯片之一,它提供了可与外部串行设备通信的串行接口,支持8/16/24/32位数据交换,为设计A/D、D/A接口电路提供了很大的灵活性。然而,当DSP系统和PC机进行通信时,如何设计合理的接口电路和通信软件,将DSP处理后的数据实时准确地传输给PC机,同时使PC机实时有效地控制DSP,成为DSP系统设计中的重要一环。本文采用异步串行通信(Universal Asychronous Receiverand Transmitter,UART),较好地解决了DSP和PC机通信这一问题。    2 TMS320C3x简介   TMS320C3x(以下简称C3x)是TI(Texa
[嵌入式]
灵动微如何做中国最好用MCU
MCU作为电子产业的重要“粮食”,产业版图正在发生改变。在中国庞大的市场需求驱动下,随着大陆半导体产业的不断发展以及arm核的开放生态,本土MCU厂商有望对专有核心的MCU厂商产生一定的市场冲击。 与此同时,市场对MCU的需求等级不断提升,32位MCU正成为主流应用,基于arm的生态优势,本土厂商可以快速切入32位MCU市场,加之中国政府对半导体产业的支持,本土MCU厂商也逐渐具备与海外MCU大厂竞争的底气和实力,并将在物联网的浪潮中大显身手。而这其中正有本土MCU厂商——灵动微电子的身影。 做中国最好用的MCU,跻身10亿元俱乐部 日前,在“2017灵动MM32协作大会”上,灵动微电子MCU事业部总经理娄方超表示,大陆半导体
[手机便携]
无线数据通信分布式实时水文监测系统
    摘要: 介绍基于无线数据通信的分布式实时水文监测系统,该系统具有实时监测和报警、历史数据本地远程查询、水文趋势预测和分析等功能。同时详尽阐述了无线扩频技术以及无线数据通信的抗干扰措施等。     关键词: 无线数据通信 扩频 抗干扰 硬件/软件设计 长江流域发生洪灾的频率逐年增加,防洪成了治理长江的首要任务。怎样才能更好地掌握河流的水文特征、预测讯期的来临,做好防洪准备,水文实时监测就成了防水治水的重要环节。为了避免人工监测中存在的弊端,开发了一套无线数据通信的分布式远程实时水文实时监测系统。该系统具有实时监测和报警、历史数据本地和远程查询、水文趋势预测和分析等功能。 1 分布式水文监测系统
[工业控制]
采用51单片机数字实验室实验和设计
  一个 单片机 应用系统是由硬件和软件组成的。系统硬件设计包括单片机CPU的选型、接口 电路 的设计、外围器件的选择、试验电路板的设计等内容。   软件设计则包括软件编写和仿真调试。   仿真是单片机开发的一个非常重要的环节,除了一些较简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行程序调试及硬件排错。现在普遍采用基于 Windows 的单片机集成开发系统( IDE)进行单片机应用程序的开发,它是指将编辑、编译,汇编、连接、调试等开发单片机所要用到的程序集成到一个系统软件中,如德国Keil公司的Keil、南京万利电子公司( Manley)的MedWin等。 iframe id="iframeu216385
[单片机]
采用51<font color='red'>单片机</font>数字实验室<font color='red'>的</font>实验和设计
基于PROTUES与单片机空调遥控器实现
空调遥控器可以用来庙宇空调机的控制温度(室内温度)、工作状态(常态、除湿、通 风)、风扇风速(强、弱、中)以及定时时间(空调工作多少小时自动开机或延时多少小时自动开机)。使用者在遥控器上庙宇预期的空调机工作状态、控制温度及 延时时间后,这些参数即送至空调机,空调机按要求开始工作。 该遥控器的要求如下: (1) 数字显示器:第一组显示时间,发送前指示设定的延时时间:0 9 h,发送后指示剩余的延时时间;第二组显示控制温度15 35℃。 (2) 工作状态指示器3组:第一组指示设定的工作状态:常态、除湿、通风;第二组指示延时开机、延时停机、取消等三种延时要求;第三组指示空调机的三种工作速度:慢速、中速、高速。 (3)红外发射管,
[单片机]
基于PROTUES与<font color='red'>单片机</font><font color='red'>的</font>空调遥控器<font color='red'>的</font>实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved