一、工作模式



PWR_UP和PRIM_RX在寄存器0x00中的第0位和第1位。

待机模式I:只是使用晶振工作,CE=0时是拉低?

待机模式II:部分时钟缓冲器处在工作模式。TX FIFO为空并且CE为高电平进入待机模式II。



然后在发送和接收时,NRF24L01有两种不同的模式,一种时ShockBurst,另一种时增强型ShockBurst,增强型多了应答。

两种模式的区别在EN_AA寄存器使能,是否开启自动应带就是区别。



自动应答(RX):收到有效的数据包后,系统进入发送模式发送确认信号。然后根据PRIM_RX和CE引脚决定

自动重发功能(ART)(TX):发送后如果没有收到确认信号,系统重发直到收到确认信号或超过重发次数。有新数据发送时丢包计数器复位。



数据通道:通过EN_RXADDR设置,默认通道0和1开启。

每个通道有自己的寄存器RX_ADDR_Px,地址通过此配置。





中断:IRQ由低电平触发,寄存器中TX_DS, RX_DS或MAX_RT为高时触发中断。所有中断都可屏蔽。

二、NRF24L01中断初始化学习

demo例程的初始化顺序:

配置CONFIG寄存器(选择需要屏蔽的中断,并开启设备PWR_UP)。

设置EN_AA寄存器(开启通道0自动应答)

设置EN_RXADDR  (开启通道0接收)

设置SETUP_AW(设置接收和发送的地址宽度)

设置SETUP_RETUP(建立重发的时间和次数)

设置RF_CH            (设置NRF24L01的工作通道频率)

设置RF_SETUP       (设置工作的参数)

设置接收RX_ADDR_P0和发送TX_ADDR地址。



小马哥的写法

设置接收模式:

①设置CONIFG为接收模式

②需要清除中断,前后都CE拉低拉高



接收函数:

①读取RD_RX_PLOAD中的FIFO数据

②清除中断



发送函数:

①装载WR_TX_PLOAD数据进FIFO

②CONFIG设置为发送模式

③清中断



错误总结:①网上说可以用串口读出寄存器的值,来确认是否配置成功。我用printf函数打印出来全是0x00。最后发现我读取时的寄存器地址加了写地址的指令值,导致出错了。

②我初始化NRF24l01后,用EXTI_GenerateSWInterrupt(EXTI_Line11);软件触发中断。

最后停在了                B       .       //就停在这里了,是有中断没有处理。

                ENDP

                ALIGN

所以才发现EXTI15_10_Handler写错了T.T   应该是EXTI15_10_IRQHandler。

③我发现很难调试,需要两快一起调试。这大大增加了难度。http://www.openedv.com/posts/list/0/57110.htm

④用上面这种方法实现了遥控器对飞机的发送,但是开应答一直时MAX_TX。后来发现飞机对遥控器发送失败。因为遥控器初始化后Rx_FIFO不为空,无法触发中断。

SPI_Write_Reg(FLUSH_RX,0xFF);

SPI_Write_Reg(FLUSH_TX,0xFF);

加上这两句就没有问题了。



⑤然后在不应答的情况下,能够双向收发了。但是应答情况下一直时MAX_RT,我去太郁闷了。

原来之前在不应答的情况向想看看RF_CH通道不一样,能不能通--》结果可以。

但是在应答模式下,居然不通。自作孽啊,卧槽。浪费了好多时间,总算调通了。

NRF24L01学习的更多相关文章

  1. [STM32F4xx 学习] SPI与nRF24L01+的应用

    前面已经总结过STM32Fxx的特点和传输过程,下面以nRF24L01+ 2.4GHz无线收发器为例,来说明如何使用SPI. 一.nRF24L01+ 2.4GHz无线收发器的介绍 1. 主要特性 全球 ...

  2. nRF24L01芯片控制——迈向无线的第一步

    nRF24L01芯片是一款专供单片机的射频收发芯片.工作于2.4GHz~2.5GHz ISM频段.融合了shockburst技术. 我先列出该芯片的硬件参数资料: 至于每个引脚的具体用途,可以参见技术 ...

  3. [Micropython]TPYBoard v10x NRF24L01无线通讯模块使用教程

    1.实验目的: •       学习使用NRF24L01无线通讯模块 2.所需原器件: •       TPYBoard v10X开发板两块 •       NRF24L01无线通讯模块两个 •    ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

随机推荐

  1. flask02

    -web框架 -从浏览器输入一个地址,发送请求,经历了哪些过程 -反向代理,正向代理 -正向代理代理客户 -反向代理代理服务器-你用过的python中的魔法方法:https://www.cnblogs ...

  2. Vue的跨域设置

    1.在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的. 2.当跨域无法请求的时候我们可以修改工程下config文件夹下的index.js中的dev:{} ...

  3. 高精度乘法模板(luogu1303)

    洛谷1303 //luogu1303,不压位的高精度乘法 #include <cstdio> #include <iostream> using namespace std; ...

  4. qt编程参考资料

    https://qtguide.ustclug.org/

  5. Eternal Victory

    题目链接 题意:给出n个点,再给出n-1条路,想一口气从1走完n个点的最小距离. 思路:好像它不构成环!md没看清题目,所以说每次遍历完全部的点后,最短的路就是每条边的距离*2减去最长路的距离. 所以 ...

  6. 状压 DP:[USACO06NOV] Corn Fields,[USACO13NOV] No Change

    [USACO06NOV] Corn Fields (试题来源:Link ) 题目描述 Farmer John has purchased a lush new rectangular pasture ...

  7. spring声明式的事务管理

    spring支持声明式事务管理和编程式事务管理两种方式. 编程式事务使用TransactionTemplate来定义,可在代码级别对事务进行定义. 声明式事务基于aop来实现,缺点是其最细粒度的事务声 ...

  8. 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)

    引子 STM32的硬件I2C很多人都对它望而却步.因为很多电工都说,STM32 硬件 I2C有BUG.不稳定.死机等等……最后都使用GPIO模拟I2C. 的确,模拟I2C好用.但是在我看来在一个72M ...

  9. 106、TensorFlow变量 (二) reshape

    import tensorflow as tf rank_three_tensor = tf.ones([3, 4, 5]) # 创建一个[3,4,5]大小的张量,3行4列,每个位置上有五个元素 ma ...

  10. tesnsorflow 版本安装错了。 可以这样删除。

    conda env remove --name tensorflow tensorflow 版本安装错了. 可以这样删除. anaconda  安装tensorflow