NRF24L01无线通信模块使用示例和调试心得总结

您所在的位置:网站首页 嵌入式电路分析报告总结 NRF24L01无线通信模块使用示例和调试心得总结

NRF24L01无线通信模块使用示例和调试心得总结

2024-07-14 07:47:14| 来源: 网络整理| 查看: 265

   nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。凭借其低功耗、传输速率高、误传率低等的优点,现已广泛应用在各种嵌入式系统中。本文就该模块总结一些学习过程中的经验和心得。

1. NRF24L01模块    该模块工作电压为3.3V,当该模块与单片机相连时,两者基于SPI通信协议进行数据交换。如果有两个以上的NRF无线模块且当代码中未设置SPI片选信号时,此时可一对多通信(即一个发多个收到该信息)。其外观如下:在这里插入图片描述

NRF24L01模块外观

    下面是该模块的PCB图,其中CE、CSN、IRQ为控制引脚;MOSI、MISO、SCK为SPI通信引脚。上面的这些引脚均可直接接普通的IO口,而不必特意选择SPI外设对应的引脚。下面解释各个引脚的具体含义: 在这里插入图片描述

NRF24L01PCB封装 引脚引脚含义VCC、GND电源引脚,注意务必接到3.3V的电源上CE使能引脚CSNSPI片选引脚SCKSPI时钟信号引脚MOS、MISOISPI数据引脚IRQ可屏蔽中断引脚

   本文的示例程序应用在两个NRF24L01模块之间相互通信的场合,其通信拓扑关系如下图: 在这里插入图片描述

本次实验中的通信关系图    上图中,之所以为了添加上位机与单片机的通信,主要是为了控制和验证通信内容。

2. SPI通信协议    上面提到了SPI通信协议,了解该协议的主要特点将非常有助于我们的调试工作。下面就讲一讲SPI通信协议:    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议。     SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。 (1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出; (2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入; (3)SCLK – Serial Clock,时钟信号,由主设备产生; (4)CS – Chip Select,从设备使能信号,由主设备控制。 SPI通信的内部简明图如下: 在这里插入图片描述

   从图中可以看出, 主机和从机都有一个串行移位寄存器,主机通过向它的 SPI 串行寄存器写入一个字节来发起一次传输。寄存器通过 MOSI 信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过 MISO 信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。    SPI 主要特点有: 可以同时发出和接收串行数据; 可以当作主机或从机工作; 提供频率可编程时钟; 发送结束中断标志; 写冲突保护; 总线竞争保护等。    SPI 总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位( CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI 主模块和与之通信的外设备时钟相位和极性应该一致。 SPI时序图如下: 在这里插入图片描述

SPI通信时序图

3. 软件设计     本次实验在stm32f10xxx单片机上学习NRF无线模块的通信特点。代码中主要包含:NRF24L01模块的驱动程序(如初始化、发送/接收数据等函数的编写)、串口通信等。软件流程如下: (1)初始化NRF无线模块和其他必要的外设; (2)进入默认发送数据状态; (3)监控串口中断,确认是否要修改通信状态——切换发送/接收信息状态;    由于代码量较大,这里只展示主函数和串口中断服务函数如下:

#include "stm32f10x.h" #include "delay.h" #include "24l01.h" #include "timer.h" #include "spi.h" #include #include "usart.h" u8 mode; int main() { u8 i; u8 hell[] = "Hello! NRF24L01",buff; mode=1; delay_init(); uart_init(115200); //设置串口波特率 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 NRF24L01_Init(); //初始化NRF24L01模块 delay_ms(50); while(NRF24L01_Check()) //如果通信模块有问题会通过串口向上位机发送警告信息 { printf("ERROR!\n"); //向上位机报错 delay_ms(500); } while(1) { if(mode) { NRF24L01_TX_Mode(); for(i=0;hell[i]!='\0';i++) { while(NRF24L01_TxPacket(&hell[i]) != TX_OK); //发送一个字节 } printf("%s",hell); //发送完后,再向上位机汇报所发送的内容 } else { NRF24L01_RX_Mode(); i = 0; while(NRF24L01_RxPacket(&buff)); //向上位机发送接收到的数据 printf("%c",buff); } } } void USART1_IRQHandler(void) //串口1中断服务程序,通过串口修改NRF24L01模块的工作状态 { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { mode =USART_ReceiveData(USART1)-'0'; //读取接收到的数据 } }

4. 总结    嵌入式通信的调试工作一直是最复杂的任务之一,因此,本着开源的精神,笔者将此次调试好的、完整的C语言项目共享在公众号“24K纯学渣”上面,回复“NRF无线通信”即可获取!另外,限于作者水平,难免出现一些纰漏,以上所述如有不妥,欢迎大家评论交流!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭