1.首先,NRF24L01是一个基于2.4GHZ的射频模块,增强型的具有更好的稳定性。

2.NRF使用的是SPI协议来进行操作,所以,需要理解SPI的几个输入输出口,再加以正确的时序操作,即可以操作NRF

3.对NRF的操作,总体上的是,使用SPI的六根线,IRQ,MISO,MOSI,SCK,CSN,CE对NRF中的寄存器进行操作以及状态的转换。

4.SPI传输一组数据是使用交换的方式,即,通过时钟信号,一位一位的,在MOSI和MISO两个端口中读取,再交换数据的过程,当然,这是在时钟信号SCK的跳变下进行的,高电平到来,MOSI中数据被送出,下降沿到来,MISO中数据为从机发送过来的,依次进行八次交换,就可以交换一个字节的数据了。

5.对NRF中的寄存器进行读取的话,思想:读取NRF中某个寄存器中的一个字节数据,而读取的话,有一个SPI指令,专门读取寄存器的,格式Read_cmd= 0x00 + 需要读取的寄存器地址,具体的还是要见NRF的中文手册,有专门的一张表,说明了对NRF各种操作的命令字。

6.对NRF中的寄存器进行写的话,思想和读取差不多,只要传入需要的参数即可,与此同时也可以返回寄存器中的状态寄存器的状态,这样可以知道当前NRF的工作状态。

7.那么,会读写操作以后,就要进行对NRF中专门收发的RX_FIFO和TX_FIFO寄存器操作了,在读写操作时,CSN先要置0,读写完了再置1,也就是说,读写需要先片选使能该模块。读写的时候,就是调用一个字节读写的方法进行一定长度的数据的读写,推荐使用地址长度为5个字节长度,数据长度4个字节长度。

8.在设置模式时,需要先把CE置0,使其进入待机模式,最后再置1。

9.发送模式配置具体的一些配置见下:

/*首先配置发送地址,需要写命令到发送地址寄存器中,然后写入地址,再写入地址的宽度

参数一:写寄存器,写入到发送地址寄存器,表示要对其操作

         参数二:写入地址,收发地址相同,通道0的地址为5个字节大小可以随意改变

         参数三:写入的地址长度,为5个字节长度

         */

         SPI_Write_TxFIFO(W_REGISTER + TX_ADDR,TxAddr, TX_ADDR_WITDH);

         /*

     然后写入需要使用0通道作为接收端的应答通道,接收端在接收到数据后,记录该地址,然后通过0通道回复应答,

所以,0通道的地址需要和发送端的发送地址相同,这样才能保证接收到接收方发来的应答信号

         参数一:写寄存器,写入到通道0寄存器中

         参数二:写入通道0的地址,地址和发送端地址相同,保证接收到应答信号

         参数三:地址长度,为5个字节长度

         */ 

         SPI_Write_TxFIFO(W_REGISTER + RX_ADDR_P0,TxAddr, TX_ADDR_WITDH);

         /*紧接着可以开始写入数据了

         参数一:还是写寄存器,写入到写寄存器中,表示开始写数据了

         参数二:需要写入的数据

         参数三:需要写入的数据长度,长度为4个字节

         */

        SPI_Write_TxFIFO(W_TX_PAYLOAD,TxData,TX_DATA_WITDH);

              /*接下来需要配置各个寄存器,比如应答方式等,主要配置头开始的六个寄存器*/

//通过写一个字节就可以设置各个寄存器,所以不使用SPI_Write_TxFIFO();函数

SPI_Write_NRF(W_REGISTER+ EN_AA, 0x01);//使能通道0,通道0自动应答允许,要是不需要自动应答,则置0x00

              SPI_Write_NRF(W_REGISTER+ EN_RXADDR, 0x01);//允许通道0

             

              //SPI_Write_NRF(W_REGISTER+ SETUP_AW, TX_DATA_WITDH);

             

SPI_Write_NRF(W_REGISTER+ SETUP_RETR, 0x1a);//设置自动重发,,自动重发十六次

              SPI_Write_NRF(W_REGISTER+ RF_CH, 0x40);//设置通道频率是0!!!

         SPI_Write_NRF(W_REGISTER + RF_SETUP, 0x07);//射频寄存器使用000 0 11 1,采用1Mbps  0dBm,

              SPI_Write_NRF(W_REGISTER+ CONFIG, 0x0e);//设置CRC检验使能有效,十六位iCRC校验,上电,发射模式

10.  一个比较有用的是检测应答信号,这是一个检验是否成功发送过的重要标志,一旦接受到应答,或者是重发次数已经达到了最大值,都可以触发中断,也就是以下几位:

/*状态寄存器的4 5 6位,详见中文手册P17*/

unsigned charbdata sta;   //状态标志,bdata是允许对一个八位的数据,如sta的每一位进行操作,相当如IO口

sbit RX_DR=sta^6;//接收数据中断,当接收到有效数据后置一,写1清除中断

sbit TX_DS=sta^5;//发送数据中断,自动工作方式下,只有当收到应答信号以后此位才为1,写1清除中断

sbit MAX_RT=sta^4;//达到最多次重发中断,如果它的中断产生,则需要清除后,系统才能进行通讯

 

使用的是置1清除中断,也就是说,发送完一次,无论是发送成功还是发送达到最大次数,都会产生中断,这种中断是需要清除的,以保证下一次的正常发送操作。

11. 接收具体配置如下:

  //参数一:写入命令到通道0接收寄存器中,使用的地址和发送地址相同,才能保证正确的传输

         SPI_Write_TxFIFO(W_REGISTER + RX_ADDR_P0,TxAddr, TX_ADDR_WITDH);//写给NRF告诉它,现在准备接受通道0的数据

      

         /*接下来设置各个寄存器,使NRF工作在接受模式下!*/

         SPI_Write_NRF(W_REGISTER + EN_AA, 0x01);//使能通道0,通道0自动应答允许,要是不需要自动应答,则置0x00

              SPI_Write_NRF(W_REGISTER+ EN_RXADDR, 0x01);//允许通道0

              //地址宽度,不知要不要写,感觉应该是要写的

              //SPI_Write_NRF(W_REGISTER+ SETUP_AW, 0x03);//设置地址宽度,000000XX,因为使用五个地址宽度,所以XX = 11,即0x03

              SPI_Write_NRF(W_REGISTER+ RF_CH, 0x40);//设置通道频率是0!!!收发双方必须保持一致

              SPI_Write_NRF(W_REGISTER+ RX_PW_P0,RX_DATA_WITDH);//设置接收通道0的数据宽度,宽度需要和发射端一样宽??

         SPI_Write_NRF(W_REGISTER + RF_SETUP, 0x07);//射频寄存器使用000 0 11 1,采用1Mbps  0dBm,

         SPI_Write_NRF(W_REGISTER + CONFIG, 0x0f);//设置CRC检验使能有效,十六位iCRC校验,上电,接收模式

11.大概的NRF操作就是以上的几步,一次可以传输四个字节的数据,当连续的传输,就可以做到对一定的数据进行收集处理工作了。虽然我也是在别人程序的基础上,加以理解以后根据NRF的中文手册编写的程序,但是,我还是调试了三天,理解代码和最后有效的差距还是很大的,需要经过近乎绝望的调试,还要以防模块的烧坏,我已经十分小心了,还是烧坏了一个NRF模块,它对于电压还是很敏感的,使用时千万要小心。

12.讲一下调试步骤:①首先调试发送端,单纯的发送,不管接收端,这时候要把自动重发和校验关闭,要是发送成功,读取status状态寄存器中内容就可以判断是否正确发送了,如果正确发送了,status中的内容应该是2EH,这是根据NRF的数据手册得出的值,具体可以见手册。而发送端成功以后,就让发送端一直发送数据,去调试接收端,接收端的话,要是正确接收了,status中应该是40H,这样,NRF基本就通了,这里调试的时候可以借助串口调试工具,看到status寄存器中的值,串口是调试的好方法。

13.希望这些经验能够让我更加有信心在嵌入式方向迈进!

关于NRF24L01模块使用的部分个人总结相关推荐

  1. 开源自制6通道航模遥控器,Arduino Pro Mini NRF24L01模块

    前言 前段时间跟着LOLI大神的教程制作了LOLI三代控,效果很好.但是,由于LOLI三代控的接收机带有数据回传功能,也就是接收机的无线模块也承担了发射数据功能,所以接收机也要使用带有功率放大芯片的N ...

  2. 【STM32】NRF24L01模块的收发调试

    NRF24L01 发送端.c文件 发送端.h文件 接收端.c文件 接收端.h文件 接收端main函数 总结: 这里我是用了两块板子来做通信实验,这里我就直接贴发送端和接收端的.c.h文件,一个是用标准 ...

  3. NRF24L01模块实现一发一收和多发一收

    折腾了两天还是弄出来了.什么24L01介绍就不要了,淘宝资料一堆. 使用的单片机型号是STMF103ZET6.还是简单介绍几点: 1.硬件连接 如图标记右下角是1脚 CE:模式控制线 CSN:SPI片 ...

  4. NRF24L01+模块实现双向通信(带ACK payload)

    本文主要关于NRF24L01+ 2.4GHz无线模块的应用. 目录 说明 模块开发的大致步骤 使用方式 一.单向通信 二.双向通信(有应答包(ACK payload)) 寄存器配置 三.星状组网 注意 ...

  5. 基于2.4GHz射频NRF24L01模块的智能家居项目总结

    1.      经过陆陆续续的几个双休日和考试周里的空闲时间里的编写和调试,终于于2015/12/26今天晚上大体完成了智能家居的调试工作!总算是没有半途而废,耐心也受到挑战. 2.      几个比 ...

  6. 【STM32CubeMX】NRF24L01模块实现“1对1“及“1对多“无线通信

      大家好,我是小政.本篇文章我将针对NRF24L01模块实现"1对1"及"1对多"无线通信的STM32CubeMX配置过程进行详细的讲解,让准备学习HAL库的 ...

  7. 51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

    51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信 NRF24L01 一.简介 二.引脚功能描述 程序设计 一.对 24L01 的程序编程的基本思路如下: 二.Tx 与 ...

  8. 基于STM32F1与NRF24L01模块的SPI简单通信

    一.前言 1.简介: 本文是基于STM32F1,将数据发送至NRF模块的寄存器,并将数据重新读取,通过串口发送出来的简单SPI单通信. 2.SPI简介: 调过STM8的都已经对SPI有所了解,调法都一 ...

  9. NRF24L01模块多发一收通信(STM32)

    NRF24L01模块多发一收通信(STM32) 目录 NRF24L01模块多发一收通信(STM32) 前言 一.解决思路 二.实验过程 1.设备ID号定义 2.数据打包发送 3.数据接收拆解 总结 前 ...

  10. arduino笔记32:nRF24l01模块使用 电磁波频率 距离限制 掉电模式 热待机模式

    最近再arduino中文社区看到了一篇介绍nrf24l01基本原理的帖子,内容感觉蛮不错的,学习一下,记录一下学习笔记. 大部分内容都是Arduino中文社区的帖子,附上自己的一点点体会. 目录 一. ...

最新文章

  1. ‘pip 安装第三方库速度太慢’的解决办法
  2. [解答] python下如何安装SocketServer?
  3. matlab神经网络4:数据聚类-自组织映射
  4. h5日期选择控件_成都h5开发工程师培训_H5入门需要知道的知识
  5. 50個AJAX Tools and Frameworks
  6. 三星Galaxy Z Fold3已开始量产:搭载骁龙888 Pro 售价或超2万
  7. 特斯拉Model 3产能跟不上,是因为用了太多机器人
  8. 从零开始山寨Caffe·叁:全局线程管理器
  9. 3星|《大产品,小团队》:携程软件开发流程改进的故事
  10. 微信扫码下载apk快速解决方案,中间页引导法
  11. css-富文本编辑显示
  12. 21点扑克游戏的出牌策略的研究
  13. autohotkey windows画板 Mspaint 快捷键
  14. Go语言slice详解
  15. 20145212 罗天晨 WEB登陆发贴及会话管理功能的实现
  16. v-distpicker的简单安装和使用 — 一款地区选择插件
  17. C# LINQ TO SQL
  18. 电商微营销茶会第2期 | “微信营销、淘宝成交”玩法解析
  19. Linux Centos7.6下安装zsh、oh-my-zsh、powerlevel10k美化终端
  20. java存储图片到数据库

热门文章

  1. mysql数据库druid密码加密_Spring+mysql+druid对数据库连接的用户名密码加密-Go语言中文社区...
  2. 一文带你了解JDK动态代理的原理
  3. java大写转小写_Java字母大小写转换的方法
  4. 文库下载软件 冰点文库下载器 软件 百度网盘链接地址
  5. python第三方库pip安装失败,无法使用pip命令安装python第三方库的原因及解决方法...
  6. js登录设置cookie
  7. 服务器搭建nginx集群
  8. AD 软件的学习--基本操作
  9. python snownlp_SnowNLP情感分析+生成词云
  10. 转速开环恒压频比异步电动机调速系统仿真