STM32控制NRF24L01无线模块进行通信

本文介绍了如何使用STM32控制器操作NRF24L01无线模块进行通信,详细讲解了NRF24L01的工作模式,特别是Enhanced ShockBurstTM模式的发送和接收流程,以及SPI接口的相关知识。通过宏定义和初始化设置,实现了STM32开发板对NRF24L01的控制,以进行无线数据传输。
摘要由CSDN通过智能技术生成

一.NRF2401无线模块

1.模块介绍

功能介绍

(1)2.4Ghz 全球开放ISM 频段免许可证使
2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合
(3)126 频道,满足多点通信和跳频通信需要
(4) 内置硬件CRC 检错和点对多点通信地址控制
(5) 低功耗1.9-3.6V 工作,待机模式下状态为22uA;掉电模
式下为900nA
(6) 内置2.4Ghz 天线,体积小巧 15mmX29mm
(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提
供中断指示),可直接接各种单片机使用,软件编程非常方便
(8) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有
很好的通信效果
(9)2.54MM间距接口, DIP封装
(10)工作于EnhancedShockBurst 具有Automaticpacket
handling,Auto packettransactionhandling,具有可选的内置包
应答机制,极大的降低丢包率。

2.硬件与接口

nRF24L01芯片

这里写图片描述

nRF24L01模块

这里写图片描述

(1) VCC脚接电压范围为1.9V~3.6V之间,不能在这个区间之外,超
过3.6V将会烧毁模块。推荐电压3.3V左右。
(2) 除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用了。
(3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI也可以

各管脚位置和定义:

8.IRQ 7MISO
6.MOSI 5.SCK
4.CSN 3.CE
2.VCC 1.GND

具体说明:

1.vcc:接1.9V~3.6V间的电压
2.GND:接地
3.CE:芯片的模式控制线。在 CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态                
4.CSN:为芯片的片选线  CSN 为低电平芯片工作
5.SCK:为芯片控制的时钟线(SPI时钟)
6.MOSI:为芯片控制数据线,主设备数据输出  从设备数据输入
7.MISO:芯片控制数据线,主设备数据输入  从设备数据输出
8.IRQ:中断信号引脚。中断时变为低电平,即NRF24L01内部发生中断时IRQ引脚从高电平变为低电平。引脚会在以下三种情况变低:(1)Tx FIFO 发完并且收到ACK(使能ACK情况下);(2)Rx FIFO 收到数据;(3)达到最大重发次数。

3.工作模式

工作模式设定

模式 PWR_UP PRIM_RX CE FIFO寄存器状态
接收模式 1 1 1 -
发送模式 1 0 1 数据在TX FIFO寄存器中
发送模式 1 0 1->0 停留在发送模式,直到数据发送完
待机模式2 1 0 1 TX FIFO为空
待机模式1 1 - 0 无数据传输
掉电模式 0 - - -

PWR_UP: 上电
PRIM_RX: 掉电
CE: 芯片使能
PWR_UP和PRIM_RX 在配置寄存器(CONFIG)中设置位0和位1:

地址 参数 复位值 类型 描述
00 寄存器 配置寄存器
- 保留(未用) 7 0 R/W 默认位“0”
- MASK_RX_DR 6 0 R/W 可屏蔽中断RX_RD;1:IRQ引脚不显示RX_RD 中断;0:RX_RD 中断产生时IRQ 引脚电平为低
- MASK_TX_DS 5 0 R/W 可屏蔽中断TX_DS;1:IRQ引脚不显示TX_DS 中断;0:TX_DS中断产生时IRQ 引脚电平为低
- MASK_MAX_RT 4 0 R/W 可屏蔽中断MAX_RT;1:IRQ 引脚不显示TX_DS 中断;0:MAX_RT 中断产生时IRQ 引脚电平为低
- EN_CRC 3 0 R/W CRC使能;如果EN_AA中任意一位为高EN_CRC 强迫为高
- CRCO 2 0 R/W CRC模式;‘0’-8 位CRC 校验‘1’-16 位CRC 校验
- PWR_UP 1 0 R/W NRF24L01上电掉电模式设置位;1:上电;0:掉电
- PRIM_RX 0 0 R/W NRF24L01接收、发射模式设置位;1:接收模式 0:发射模式

3.1 收发模式

收发模式有Enhanced(增强型) ShockBurstTM收发模式、ShockBurstTM收发模式和直接收发模式三种。

3.1.1 ShockBurstTM 模式
ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)
发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。与射频协议相
关的所有高速信号处理都在片内进行,这种做法有三大好处:尽量节能;低的系统费用(低速微处理器也能
进行高速射频发射);数据在空中停留时间短,抗干扰性高。nRF2401 的 ShockBurstTM 技术同时也减小
了整个系统的平均工作电流。
在 ShockBurstTM 收发模式下,nRF2401 自动处理字头和 CRC 校验码。在接收数据时,自动把字头和
CRC 校验码移去。在发送数据时,自动加上字头和 CRC 校验码,当发送过程完成后,数据准备好引脚通
知微处理器数据发射完毕。

ShockBurstTM收发模式可以与Nrf2401a,02,E1及E2兼容

3.1.2 Enhanced(增强型) ShockBurstTM 模式

增强型ShockBurst TM 典型的双链方式为:发送方要求终端设备在接收到数据后有应答信号,以便发送方检测有无数据丢失,一旦丢失则重发数据。重发数据设置在地址为 04 的数据重发设置寄存器 用于设置其重发次数及设置在未收到应答信号后等待重发的时间。

数据重发设置寄存器(SETUP_RETR):

地址 参数 复位值 类型 描述
04 寄存器 数据重发设置寄存器
- ARD [7:4] 0000 R/W 自动重发延时: ‘0000’-等待250+86us; ‘0001’-等待500+86us; ‘0010’-等待750+86us; …… ‘1111’-等待4000+86us; (延时时间是指一包数据发送完成到下一包数据开始发射之间的时间间隔)
- ARC [3:0] 0011 R/W 自动重发计数: ‘0000’-禁止自动重发; ‘0001’-自动重发一次; …… ‘1111’-自动重发15次

nRF24L01 在接收模式下可以接收6 路不同通道的数据。
每一个数据通道使用不同的地址,但是共用相同的频道。

也就是说6 个不同的nRF24L01 设置为发送模式后可以与同一个设置为接收模式的nRF24L01 进行通讯,而设置为接收模式的nRF24L01 可以对这6 个发射端进行识别。

数据通道0 是唯一
的一个可以配置为40 位自身地址的数据通道。1~5 数据通道都为8 位自身地址和32 位公用地址。所有的
数据通道都可以设置为增强型ShockBurst 模式。

NRF24L01在确认收到数据后记录地址,并以此地址为目标地址发送应答信号,在发送端,数据通道0被用作接收应答信号,因此属通道0 的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号。

这里写图片描述

当MCU控制NRF24L01发送数据时,NRF24L01就会启动发送数据,发送完后NRF24L01就会转到接收模式并等待终端的应答信号。

如果没有收到应答信号,NRF24L01就会重发数据包,直到收到应答信号,或达到重发次数寄存器设定的最大值为止,如果重发次数超过了设定值则产生MAX_RT(最大重发次数中断)(应该在该中断没有被屏蔽的情况下的时候才会发生)

只要收到确认信号,nRF24L01 就认为最后一包数据已经发送成功(接收方已经收到数据),把TX FIFO
中的数据清除掉并产生TX_DS中断(数据发送完中断)(IRQ 引脚置高)。

3.1.2.1 Enhanced ShockBurstTM发射流程
1.配置CONFIG寄存器位PRIM_RX 为低,进入发送模式
2.当MCU 有数据要发送时,接收节点地址(TX_ADDR)和有效数据(TX_PLD)通过SPI 接口写入
nRF24L01。发送数据的长度以字节计数从MCU 写入TX FIFO。当CSN 为低时数据被不断的写入。
发送端发送完数据后,将通道0 设置为接收模式来接收应答信号,其接收地址(RX_ADDR_P0)与接
收端地址(TX_ADDR)相同。
例:在上图 中数据通道5 的发送端(TX5)及接收端(RX)地址设置如下:
TX5:TX_ADDR=0xB3B4B5B605
TX5:RX_ADDR_P0=0xB3B4B5B605
RX:RX_ADDR_P5=0xB3B4B5B605
3.把CE置高,最小时间为10us,激发nRF24L01进行Enhanced ShockBurstTM 发射
4.nRF24L01 Enhanced ShockBurstTM 模式:
(1) 无线系统上电
(2) 频数据打包(加字头、 CRC校验码)
(3) 高速发射数据包(由MCU 设定为1Mbps 或2Mbps)
5、 如果启动了自动应答模式(自动重发计数器不等于0,ENAA_P0=1),无线芯片立即进入接收模式。
如果在有效应答时间范围内收到应答信号,则认为数据成功发送到了接收端,此时状态寄存器的
TX_DS 位置高并把数据从TX FIFO 中清除掉。如果在设定时间范围内没有接收到应答信号,则重
新发送数据。如果自动重发计数器(ARC_CNT)溢出(超过了编程设定的值),则状态寄存器的
MAX_RT 位置高。不清除TX FIFO 中的数据。当MAX_RT 或TX_DS 为高电平时IRQ 引脚产生中
断。IRQ 中断通过写状态寄存器来复位(见中断章节)。如果重发次数在达到设定的最大重发次数
时还没有收到应答信号的话,在MAX_RX 中断清除之前不会重发数据包。数据包丢失计数器
(PLOS_CNT)在每次产生MAX_RT 中断后加一。也就是说:重发计数器ARC_CNT 计算重发数据
包次数,PLOS_CNT 计算在达到最大允许重发次数时仍没有发送成功的数据包个数。
6、 如果CE 置低,则系统进入待机模式I。如果不设置CE 为低,则系统会发送TX FIFO 寄存器中下
一包数据。如果TX FIFO 寄存器为空并且CE 为高则系统进入待机模式II.
7、 如果系统在待机模式II,当CE 置低后系统立即进入待机模式I.
相关寄存器:

自动应答寄存器:

地址 参数 复位值 类型 描述
01 EN_AA Enhanced ShockBurstTM - - - 使能”自动应答”功能; 此功能禁止后可与nRF2401通讯
- 保留(未用) [7:6] 00 R/W 默认为00
- ENAA_P5 5 1 R/W 数据通道5自动应答允许
- ENAA_P4 4 1 R/W 数据通道4自动应答允许
- ENAA_P3 3 1 R/W 数据通道3自动应答允许
- ENAA_P2 2 1 R/W 数据通道2自动应答允许
- ENAA_P1 1 1 R/W 数据通道1自动应答允许
- ENAA
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值