《遥控器开发基础5开源编队无人机SPI(24G双机通信).docx》由会员分享,可在线阅读,更多相关《遥控器开发基础5开源编队无人机SPI(24G双机通信).docx(10页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录一、NRF2410111.1NRF24101简介1.、24j彳口22.1NRF24101使用方法2三、2.4G双机通信实验33.1 遥控器端33.2 飞控端5实验现象7官网地址:hup:WWW.fengke.c1ub购买链接:http:ShOP官方QQ群:457586268SPI(2.4G双机通信)一、NRF241011.1NRF24101简介NRF24101是由NoRD1C生产的工作在2.4GHz2.5GHz的ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBursJ模式控制器、功率放大器、晶体振荡器、调制器和解调器。NRF2
2、4101的输出功率频道选择和协议的设置均可以通过SPI接口进行设置,因此,其具有极高的兼容性,几乎可以连接到各种单片机芯片,并完成无线数据传送工作。除此之外,NRF24101的功耗也非常的低,当工作在发射模式下发射功率为OdBm时电流消耗仅为11.3mA,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。所以NRF24101可以广泛地应用在无线键鼠、无线门禁、无线电台、智能工业设备、玩具等场合。如下表所示列举了NRF24101的特性参数。参数名称参数特性小体积QFN204x4mm封装宽电压工作范围1.9V3.6V,输入引脚可承受5V电压输入工作温度范围-40C+80C工作频率范围2.
3、400GHz-2.525GHz发射功率可选择为OdBm-6dBm、-12dBm和-18dBm数据传输速率支持1Mbps、2Mbps低功耗设计接收时工作电流12.3mA,OdBm功率发射时11.3mA,掉电模式时仅为900nA多通道设计126个通讯通道,6个数据通道,满足多点通讯和调频需要多模式支持增强型ShockBurstw工作模式,硬件的CRC校验和点对多点的地址控制单次数据传输数据包每次可传输132Byte的数据接口4线SP1通讯端口,通讯速率最高可达8Mbps,适合与各种MCU连接,编程简单中断MCU可通过IRQ引脚块判断是否完成数据接收和数据发送如下图所示为NRF24101芯片实物图二
4、、2.4G双机通信2.1NRF24101使用方法NRF24101是以包的形式进行发送的,具体的包格式如下表所示。前导码地址包控制字负载数据CRCNRF24101在通信前需要进行一系列的参数配置,而在配置其参数时,NRF24101必须工作待机模式,即CE脚拉低。在发送模式下的配置流程如下表所示。1写入发送地址和接受应答通道地址2使能应答通道3使能接收地址4设置自动重发时间和重发次数5设置通信频道6设置参数(功率、增益等)7设置模式(发送、接收)配置为接收模式的流程如下表所示。1配置接收通道地址2设置接收通道有效数据宽度3使能通道自动应答4使能接受通道地址5设置通信频道6设置参数(功率、增益等)7
5、设置模式(发送、接收)配置完后就是发送和接收的处理了,发送的流程如下表所示。1向FIFo中写入数据,等待IRQ发送完成中断2读取状态寄存器中的值3将读取到的状态寄存器中的值写入状态寄存器4判断之前读取到的状态寄存器中的值判断是发送完成还是发送失败5清空fifo寄存器接收流程如下表所示。1读取状态寄存器中的值2将读取到的状态寄存器中的值写入状态寄存器3判断状态寄存器中得值,是否接受成功(成功就读取f1fo中的数据,并且清空fifo)三、2.4G双机通信实验2.4G双机通信实验涉及到遥控器端和飞控端,两者的2.4G通道均设置为HOo首先配置遥控器端的左摇杆的按键为外部中断模式,一旦按下做摇杆按键,
6、就发送“Remoter”这个字符串到飞控上,飞控接收到后,把1ED航情灯进行闪烁,然后再向遥控器回发“Airp1ane”这个字符串,遥控收到后,闪烁电源指示灯。无论是遥控器还是飞控使用NRF24101均使用到了STM32的硬件SP1不同的是遥控器使用的是SPI2,而飞控使用的是SPI1oSTM32的SP1配置方法可以参考飞控开发基础SPI(六轴传感器数据获取)。3.1遥控器端本次实验中遥控器端触发无线数据的发送是通过外部中断实现的,具体的外部中断配置可以参考遥控器开发实战-中断。在该中断中向飞控发送“Remoter”字符串,具体代码如下图所示。35uint8_tdataToSend8=*Rem
7、oter*;36voidEXT19_5RQHandIer(VOid)/下降沿中断3738staticunsignedcharfIag=O;39if(GPIO-ReadInputDataBit(GPIOB,GPI0_Pin_9)=0)40:(411ED_De1ay(5);去抖42if(GPIO_ReadInputDataBit(GPIOB,GPI0_Pin_9)=0)43-4445NRFJxPacket(dataToSend,8);464748EXTIeC1earITPendingBit(EXTI_1ine9);/清除1IXE9上的中断标志位495051)521128 遥控器端的NRF24101
8、的初始化代码如下图所示。129 NRFVnteReg(MRFWRITEREG+RXPVPO,RXP1OADWIDTH);/送择通递。的有效数130 NRFZVriteZReg(MRF1VfRTTEZREG+COHFIG,xf);IRQ收发完成中If开启,16位CRC,主抠收131 -)132 e1seifode1=2)TX133 J(134 NRFWrte-Reg(HRF_WRITE_REG+RXPVPO,RX_P1oADjHDTH).迭择通道0的有效数2135 NRFZVriteZReg(I1RFZVriteZreg+COMFIG,0e);:IRQ收发亮成中射开启,16位CRC,主发法136
9、 -137 e1seif(node1=3)/RX2137J(138NRF_rite_Reg(F1USH_TX,Oxff);139NRFZVriteZRee(F1USHZRXJXff);140NRFNrIte_Reg(RRFWRITEREG+HFIG,C0f);/IRQ收发完成中舒开启,16位CRC,主接收141142SPIRW(OxSO);143SPIjiW(OX73);144NRF-Wnte_Reg(MRF-WRIIEJiEG+Gx1c,0x01):启用动套银荷长度145NRFj?rite_Reg(HRFJrRnE_REG+CxId,0x06);允许毂荷系MK146)-147e1se/214
10、8(149NRFVnteReg(MRFWRITEREG+COMFIG,0x0e):/IRQ收发完成中断开启,16位CRC,主发法150NRF二Vrite二Reg(F1US11TX,Oxff):151NRF-Vrite-Re?(F1USH-RX,Oxff):152153SPI.RW(0x50);154SP1RW(OX73):155 KRFZVrite-Reg(HRF.VRE.REG+1c,Ci1):/启用幼花交荷长度156 NRFWriteReg(MRFWRIIEREC+O1d,OXo6);允许气荷带ACK159SPI_CEHO;160)遥控器端的接收处理是在主循环中轮询实现的,收到飞控发来的信
11、息后,电源指示灯闪烁,具体代码如下图所示。uint16_tNRF.SSI,NRFSSI.CNT;NRFfB号强度uint8_tNRF_Evnet=0;|voidNRF_Check_Event(void)u8sta=NRF_ReaC1Reg(NRF_READ_REG+NRFRegSTATUS);接收到有效数据if(sta&(1RX-DR)(RX_1EN=NRF_Read_Reg(R_RX_P1_WID);if(RX-1EN33)三NRF_Read_Buf(RD_RX_P1OAD,HRF241OI_2_RXDATA,RX_1EN);GPIO-ResetBits(GPIO.Signa14,1ED_P
12、over);7/收至“闪烁1ED-De1ay(IOO);GPIO-SetBits(GPI0-Signa14,1ED_Power);/DT_NrfData_An1(NRF24101_2_RXDATA,RX_1EN);NRF_SSI_CNT+;NRF_Evnet=1;e1seNRF_Write_Reg(F1USH_RX,Oxff);清空缓冲区)一/发送完成(自动应答模式下,只有当接收到应答信号后才置1)/if(sta&(1TX.DS)/1达到最大重发次数if(sta&(1MAX-RT)3if(sta&0x01)/TXFIFO寄存器满标志(NRF_Write_Reg(F1USH.TX,Oxff);N
13、RF_Write_Reg(NRF_WRITE_REG+NRFRegSTATUS,sta);1821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242253.2飞控端飞控端的无线数据接收在主循环中实现,接收到遥控器发送的信息后,电源指示灯闪烁,且向遥控端回发“Airp1ane”,具体代码如下图所示。171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214uint16_tNRF_SS1NRF_SS1_CHT;IiRF信号强度u8dataToSend=IxrAirp1anejr;voidNRF-Check_Event(void)Tu8sta=NRF_Read_Reg(NRF_READ_REG+NRFRegSTATUS);收到有效数据包if(sta(1RX.DR)(