NRF24L01学习
一、工作模式

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
③我发现很难调试,需要两快一起调试。这大大增加了难度。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学习的更多相关文章
- [STM32F4xx 学习] SPI与nRF24L01+的应用
前面已经总结过STM32Fxx的特点和传输过程,下面以nRF24L01+ 2.4GHz无线收发器为例,来说明如何使用SPI. 一.nRF24L01+ 2.4GHz无线收发器的介绍 1. 主要特性 全球 ...
- nRF24L01芯片控制——迈向无线的第一步
nRF24L01芯片是一款专供单片机的射频收发芯片.工作于2.4GHz~2.5GHz ISM频段.融合了shockburst技术. 我先列出该芯片的硬件参数资料: 至于每个引脚的具体用途,可以参见技术 ...
- [Micropython]TPYBoard v10x NRF24L01无线通讯模块使用教程
1.实验目的: • 学习使用NRF24L01无线通讯模块 2.所需原器件: • TPYBoard v10X开发板两块 • NRF24L01无线通讯模块两个 • ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
随机推荐
- Struts2基础-4 -struts拦截器
Struts2拦截器工作原理 拦截器围绕着 Action和 Result的执行而执行. Struts2拦截器的工作方式如图10.2所示.从上图中可以看出, Struts2拦截器的实现原理和 Servl ...
- LDD3 第7章 Time,Delays and Deferred Work
处理时间委托包括如下任务,按复杂度依次上升: 测量时间流失和比较时间 知道当前时间 指定时间量的延时操作 调度异步函数在之后的时间发生 一.测量时间流失 系统定时硬件规律的产生定时器中断,在内核启动阶 ...
- python实现计时器(装饰器)
1.写一个装饰器,查看函数执行的时间 import time # 装饰器run_time,@run_time加在谁头上,谁就是参数fundef run_time(fun): start_time = ...
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)
引子 STM32的硬件I2C很多人都对它望而却步.因为很多电工都说,STM32 硬件 I2C有BUG.不稳定.死机等等……最后都使用GPIO模拟I2C. 的确,模拟I2C好用.但是在我看来在一个72M ...
- 慕课-tooltip提示框总结
在慕课上学Waynej老师的tooltip浮动提示框,老师每次讲课都会强调搬砖的流程,这点在上了老师的几节课后宝宝终于体会到了: 分析→设计→编码→优化 分析:分析该功能到底是怎样的,其实就是需求分析 ...
- 发布delphi程序(build with runtime package)要带哪些文件?
Delphi提供两种方式来编译你的程序:使用包或者是单独的exe 使用包,你可以使用如下方法设置: 项目选项(菜单project->options->Packages页), 在Runtim ...
- apr not found,APR-util not found,pcre,
1.下载所需软件包(此下载链接经由作者验证可使用): wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz wget http://arch ...
- nginx 虚拟主机+反向代理+负载均衡
nginx是一款免费.开源的http服务器,它是由俄罗斯程序设计师开发的,官方测试,nginx能支撑5万的并发量,主要功能有虚拟主机.反向代理和负载均衡等. nginx配置 # 全局块 ... # e ...
- js中浅谈this对象(未补充完整)
什么是this? 1.javascript语言中,一切皆为对象(除了 undefined 和 null 之外),运行环境也是对象,所以函数都是在某个对象之中运行,this就是这个对象(环境). 2.t ...
- 1.etcd
etcd v3版接口命令 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/heal ...