| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 2.4G无线通信 -> 正文阅读 |
|
[嵌入式]2.4G无线通信 |
NRF24L01是NORDIC公司生产的一款无线通信通信芯片,采用FSK 调制,集成NORDIC自家的Enhanced Short Burst协议。可以实现点对点或是1对6的无线通信。无线通信速度最高可达到2Mbps。NRF24L01采用SPI通信,可以很方便的连接到MCU上面。 NRF24L01的特点 ①2.4G全球开放的ISM频段,免许可证使用。 ②最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。 ③126个可选的频道,满足多点通信和调频通信的需要。 ④内置CRC检错和点对多点的通信地址控制。 ⑤可设置自动应答,确保数据可靠传输。 NRF24L01模块介绍 ?CE:模式控制线。在 CSN为低的 情况下,CE 协同CONFIG 寄存器 共同决定NRF24L01 的状态(参照 NRF24L01 的状态机)?? ??? ? ?? ??? ? CSN:SPI片选线 SCK:SPI时钟线 MOSI:SPI数据线(主机输出,从机输入) MISO:SPI数据线(主机输入,从机输出) IRQ:中断信号线。中断时变为低电平,在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、Rx FIFO 收到数据、达到最大重发次数。 SPI时序 ?空闲状态SCK为0,CPOL=0;数据在时钟第一个时间边沿采集,CPHA=0; Cn:SPI命令位 Sn:STATUS寄存器位 ? ? ? ? Dn:数据位( MSB,多字节传输时,低字节在前) NRF24L01的工作模式,由CE和CONFIG寄存器(0X00)的PWR_UP(第1位)和PRIM_RX(第0位)位共同控制: 其中,收发模式又有: Enhanced ShockBurstTM收发模式和ShockBurstTM收发模式,只有Enhanced ShockBurstTM收发模式支持自动ACK和自动重发。开启自动ACK,则默认选择Enhanced模式?。 Enhanced ShockBurstTM模式介绍 Enhanced ShockBurstTM收发模式,使用片内的先入先出堆栈区,数据可以低速从微控制器送入,但高速(1Mbps/2Mbps)发射,这样可以尽量节能。与射频协议相关的所有高速信号处理都在片内进行,这种做法有大好处: 1,节能; 2,低的系统费用(低速微处理器也能进行高速射频发射); 3,数据在空中停留时间短,抗干扰性高; ? ? 在Enhanced ShockBurstTM收发模式下, NRF24L01自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,在发送模式下,置CE为高,至少10us,将使能发送过程。 Enhanced ShockBurstTM发送流程 1. 把地址和要发送的数据按时序送入NRF24L01; 2. 配置CONFIG寄存器,使之进入发送模式; 3. 微控制器把CE置高(至少10us),激发Enhanced ShockBurstTM发射; 4. Enhanced ShockBurstTM发射:① 给射频前端供电;②射频数据打包(加字头、CRC校验码); ③ 高速发射数据包; ④发射完成,NRF24L01进入空闲状态。 Enhanced ShockBurstTM发送模式初始化 1)写Tx 节点的地址 TX_ADDR 2)写Rx 节点的地址(主要是为了使能Auto Ack) RX_ADDR_P0 3)使能AUTO ACK EN_AA 4)使能PIPE 0 EN_RXADDR 5)配置自动重发次数 SETUP_RETR 6)选择通信频率 RF_CH 频率计算公式:2400+RF_CH ?(Mhz) 7)配置发射参数(低噪放大器增益、发射功率、无线速率) RF_SETUP 8)配置24L01 的基本参数以及切换工作模式 CONFIG。 Enhanced ShockBurstTM接收流程 1. 配置接收地址和要接收的数据包大小; 2. 配置CONFIG寄存器,使之进入接收模式,把CE置高。 3. 130us后,NRF24L01进入监视状态,等待数据包的到来; 4. 当接收到正确的数据包(正确的地址和CRC校验码),NRF2401自动把字头、地址和CRC校验位移去; 5. NRF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起微控制器中断)通知微控制器; 6. 微控制器把数据从FIFO读出(0X61指令); 7. 所有数据读取完毕后,可以清除STATUS寄存器。NRF2401可以进入 四种主要的模式之一; Enhanced ShockBurstTM接收模式初始化 1)写Rx 节点的地址 RX_ADDR_P0 2)使能AUTO ACK EN_AA 3)使能PIPE 0 EN_RXADDR 4)选择通信频率 RF_CH 5)选择通道0 有效数据宽度 RX_PW_P0 6)配置发射参数(低噪放大器增益、发射功率、无线速率) RF_SETUP 7)配置24L01 的基本参数以及切换工作模式 CONFIG。 这里NRF24L01也是使用的SPI1,和W25Q128共用一个SPI接口,所以在使用的时候,他 们分时复用SPI1。本章我们需要把W25Q128的片选信号置高,以防止这个器件对NRF24L01 的通信造成干扰。另外,NRF_IRQ和RS485_RE共用了PG8,所以,他们不能同时使用,不过 我们一般用不到NRF_IRQ这个信号,因此,RS485和NRF一般也可以同时使用。? 代码讲解 打开 24l01.c 文件,在 NRF24L01_Init 函数里面, 我们调用了 SPI1_Init()函数,SCK 空闲的时候是低电平的,而数据在 SCK 的上升沿被读写。所以,我们需要设置 SPI 的 CPOL 和 CPHA 均为 0,来满足 NRF24L01 对 SPI 操作的要求。所以,我们在 NRF24L01_Init 函数里面又单独添 加了将 CPOL 和 CPHA 设置为 0 的函数 NRF24L01_SPI_Init。 24l01.h 头文件,部分代码,主要定义了一些 24L01 的命令字,以及函数声明,这里还通过 TX_PLOAD_WIDTH 和 RX_PLOAD_WIDTH 决定了发射和接收的数据宽度,也就是我们每次发射和接受的有效字节数。NRF24L01 每次最多传输 32 个字节,再多的字节传输则需要多次传送。 main函数,程序运行时先通过 NRF24L01_Check 函 数检测 NRF24L01 是否存在,如果存在,则让用户选择发送模式(KEY1)还是接收模式(KEY0), 在确定模式之后,设置 NRF24L01 的工作模式,然后执行相应的数据发送/接收处理。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:24:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |