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对 ...
随机推荐
- Linux0.11内核源码——内核态线程(进程)切换的实现
以fork()函数为例,分析内核态进程切换的实现 首先在用户态的某个进程中执行了fork()函数 fork引发中断,切入内核,内核栈绑定用户栈 首先分析五段论中的第一段: 中断入口:先把相关寄存器压栈 ...
- Dllregisterserver调用失败解决方法
在做一个注册com组件时,出现这样的情况 出现这个错误一般是和权限问题有关,命令提示符需要以管理员权限运行才可以注册成功. 最简单的解决方法就是: 在开始菜单右击—>命令提示符(管理员)(A) ...
- LOJ 2541 「PKUWC2018」猎人杀——思路+概率+容斥+分治
题目:https://loj.ac/problem/2541 看了题解才会……有三点很巧妙. 1.分母如果变动,就很不好.所以考虑把操作改成 “已经选过的人仍然按 \( w_i \) 的概率被选,但是 ...
- Distribution money
Distribution money Accepts: 713 Submissions: 1881 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- mysql经典面试题之学生成绩表
需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID, ...
- VMware中对Linux虚拟机的网络配置静态IP的配置
前言 踏出象牙塔,进入公司,由于公司的所有产品都是Linux下的,必然自己这段时间需要在自己的工作机器先学习一下.项目代码是用Source Insight进行查看的,总是Ctrl + Alt的切来切去 ...
- 测开之路二十三:python常用模块
os模块 sys模块 hashlib shutil对文件和目录进行操作 random和随机相关 json
- win10下cmd备注
要复制cmd里的字符串,右键选标记,选中待复制的字符串,ctrl+c 复制,ctrl+v粘贴内容(或者右键选择复制).这项操作支持复制cmd里的内容到其他地方,如txt里 win10之前cmd不支持c ...
- 安装Consul服务中心
安装Consul服务中心 首先下载对应版本的安装程序.点击下载 我下载的是macOS64位版本,下载文件是一个ZIP文件,下载后解压缩到一个你喜欢的位置,以开发模式启动consul服务: #进入con ...
- vscode 常用命令行
Ctrl+Shift+P: 打开命令面板 打开一个新窗口: Ctrl+Shift+N 关闭窗口: Ctrl+Shift+W 新建文件 Ctrl+N 代码行缩进 Ctrl+[ . Ctrl+] 上下 ...