关于nrf24l01无法通行问题 10C

在配置STM32F103C8T6 +nrf2401问题时,SPI读写功能没问题,即nrf2401 check成功。
我配置发送端关闭自动应答:SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00); // Enable Auto.Ack:Pipe0

发送完成后,读取status寄存器内容为0x2e, fifostatus寄存器内容为0x11,即表示发送模块成功发送。
我配置接收端关闭ACK: SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00); // Enable Auto.Ack:Pipe0,在上述发送端一直工作前提下接收端不能接收数据,查看
接收端status寄存器内容为:0x0e,表示接收端未收到数据。
我猜想不能通行原因是通道、地址、频率、模式不正确,但仔细检查发送、接收端上述配置完全一样。现在不知道问题出在哪里了,请各位帮我看看。

uint8_t NRF24L01_Check(void)
{
uint8_t buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
uint8_t i;

SPI_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//

SPI_Read_Buf(TX_ADDR,buf,5);

for(i=0;i<5;i++)if(buf[i]!=0XA5)break;

if(i!=5)return 1;
return 0;

}

void TX_Mode(void)

{

NRF24L01_SCK_L;
NRF24L01_CE_L;
SPI_Write_Buf(NRF_WRITE_REG + TX_ADDR, (u8*)TX_ADDRESS, 5);

SPI_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, (u8*)TX_ADDRESS, 5);
SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00); // Enable Auto.Ack:Pipe0
SPI_RW_Reg(NRF_WRITE_REG + EN_RXADDR, 0x00); // Enable Pipe0
SPI_RW_Reg(NRF_WRITE_REG + SETUP_RETR, 0x00);
SPI_RW_Reg(NRF_WRITE_REG + SETUP_AW, 0x03);

SPI_RW_Reg(NRF_WRITE_REG + RF_CH, 40);

SPI_RW_Reg(NRF_WRITE_REG + RF_SETUP, 0x0F);

SPI_RW_Reg(NRF_WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);
SPI_RW_Reg(NRF_WRITE_REG + CONFIG, 0x0e);

NRF24L01_CE_H;
delay_us(150);
}

void RX_Mode(void)

{

NRF24L01_SCK_L;
NRF24L01_CE_L;
SPI_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, (u8*)TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device

    SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00);      // Enable Auto.Ack:Pipe0
    SPI_RW_Reg(NRF_WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  SPI_RW_Reg(NRF_WRITE_REG + SETUP_AW, 0x03);  // 
    SPI_RW_Reg(NRF_WRITE_REG + RF_CH, 40);        // Select RF channel 40 
    SPI_RW_Reg(NRF_WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); 
    SPI_RW_Reg(NRF_WRITE_REG + RF_SETUP, 0x0f);   
    SPI_RW_Reg(NRF_WRITE_REG + CONFIG, 0x0f);    

    NRF24L01_CE_H; // 
    delay_us(150);  

}

u8 NRF24L01_RxPacket(u8 *rx_buf)

{

int16_t sta,fifosta,tt=0;
sta=SPI_Read_Reg(STATUS);

fifosta=SPI_Read_Reg(FIFO_STATUS);
if(!( NRF24L01_IRQ))
{
sta=SPI_Read_Reg(STATUS);

if(sta&RX_OK)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);
SPI_RW_Reg(FLUSH_RX,0xff);
SPI_RW_Reg(NRF_WRITE_REG+STATUS,0x7f);
tt=1;

    }
}
return (tt);                                    

}
u8 NRF24L01_TxPacket(u8 *txbuf)
{

uint8_t sta,fifosta,cd;
NRF24L01_CE_L;

    SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);
  sta = SPI_Read_Reg(STATUS); 
    fifosta = SPI_Read_Reg(FIFO_STATUS);
    NRF24L01_CE_H;//       
    while(NRF24L01_IRQ!=0);//
    sta=SPI_Read_Reg(STATUS);  //
  fifosta = SPI_Read_Reg(FIFO_STATUS);
cd=SPI_Read_Reg(0x09); 

    SPI_RW_Reg(NRF_WRITE_REG+STATUS,sta); 
    if(sta&MAX_TX)//
    {
            SPI_RW_Reg(FLUSH_TX,0xff);//
            return MAX_TX; 
    }
    if(sta&TX_OK)
    {   
         ;
         return 0x01;        
    }

    return 0xff;//

}

1

1个回答

stm32使用的开发板吗?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
NRF24L01+串口上位机
这个是自己写的无线通讯模块NRF24L01的 32F103的程序,实测过可用
nRF24L01发送失败原因之“MAX_RT”未清零
调了好几天的nRF24L01,看好好多网友写的代码,基本相同,但就是调不通。n然后检查电路硬件,也没有问题。n最后,还是把DataSheet拿过来看寄存器,读STATUS寄存器,发现MAX_RT位总为‘1’;然后百度搜了一下原因n杭电王同学的解释在最下方,真实拨开云雾见青天!!!n最后的解决方法如王同学所说,在void nRF24L01_TxPacket(char * tx_buf)函数中
NRF24L01接收问题
在对nrf24l01编程时,如果将RX_mode();函数(即打开接收函数)在while(1)中调用,那么将会很难接收到数据,甚至接收不到,通过测试找到原因:如果每秒钟发送一包数据,然后在发送完成后打开接收,这样可以很好的接收到数据。分析原因:如果在while(1)中一直调用打开接收的话,那么将会一直处于正在打开状态。所以很难接收到数据,如果只在需要的时候打开一次,就没有问题。打开之后就不需要再次...
stm32上NRF24L01无法通信的问题。。
之前早就用过这个模块, 但是最近用的时候,反复的调,,就是不能通信,,调了两天,终于调出来了,, 找到了问题所在。。。。nnn在stm32上面驱动NRF24L01,,需要初始化IO口,初始化SPI,配置NRF的寄存器,配置发送接收模式,最后调用发包收包函数就行了。nnn假如SPI的速度太快,,会导致NRF不正常,,无法读写寄存器。。nnn当程序下载到stm32上后,按复位键的次数
nrf24l01模块调试心得
nrf24l01这个模块直接把我折腾了三天,最开始调通之后能够实现收发。但问题是只能实现一次通信,而且每次通信前必须按下接受模块的复位键rn时间还不能太短,按完之后就可以接收一次数据,如果按下电源键重启都不行,必须按复位。我在这个问题里卡了两天的时间,各种查资料,在网上rn找大神的调试方法,无论如何都解决不了,后来第三天的时候在网上看到一篇调试文章说接收端CE置高后时间延迟不能太短,最好加到毫秒级
最全的NRF24L01中英文资料
从网上收集到的NRF24L01中英文资料
NRF24L01收发程序STM32F407
NRF24L01可以正常收发数据,是在正点原子的基础上修改引脚,引脚对应关系 B12-CSN B13-SCK B14-MISO B15-MOSI D10-IRQ D11-CE 使用了SPI2,里面既可以传8位数据,也可以传16位,32位的很少用到,我就不写了,有兴趣的可以自己参考我的传输协议(在主函数main里)。
NRF24L01+接收不正常的问题(只有开机才能接收到一两条数据)
NRF24L01+接收不正常的问题(只有开机才能接收到一两条数据)稍后整理: n网上的说法无外乎几种:1. 供电不稳;2. 接收函数设置不对;3. 地址,通道,频率,字节数不对。
NRF24L01 接收程序放中断函数函数里不生效的解决办法
我在做毕业设计的过程中用到了NRF24L01模块,需要用中断方式接受数据,而实际操作过程中我发现接受函数放中断中会出现只接受RX_DR中断无法清除中断的现像,后百度发现也有人遇到过跟我一样的问题,说是因为中断中形参没有生效,也就是OxFF并没有写进STATUS寄存器。后来又遇到配置接收寄存器也写不进的情况。苦于几天无头绪的乱打乱撞,心一横,把接收相关配置函数全部用无参数函数重新编写,再在中断函数中
stm8 nrf24l01 硬件spi成功,解决bug
下面给出stm8 硬件spi初始化nrf24l01的spi代码:n#include "myspi.h"nnnvoid initSpi(void){n SPI_DeInit();n GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);n GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);n GPIO_Init(GPIOC,GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_F
NRF24L01模块实现一发一收和多发一收
 折腾了两天还是弄出来了。什么24L01介绍就不要了,淘宝资料一堆。使用的单片机型号是STMF103ZET6.还是简单介绍几点:1.硬件连接如图标记右下角是1脚CE:模式控制线CSN:SPI片选线SCK:SPI时钟线VCC:3.3V供电MOSI:SPI数据线(主机输出,从机输入)MISO:SPI数据线(主机输入,从机输出)IRQ:中断信号线。中断时变为低电平,在以下三种情况变低:Tx FIFO 发...
STM32操作NRF24L01与USB串口无线模块通讯问题记录
近日毕业设计需要使用32去控制NRF24L01进行无线通讯,为了方便,遂想移植原子的程序。在操作过程中遇到了很多问题,困扰我好几天,最后经学弟大神点拨下,成功破冰。这些问题还是比较头疼的,特别对NRF24L01和32不熟的我来说一旦碰上了很难找到出错点。调试NRF24L01需要两块模块,所以准备一个用单片机STM32F103C8T6操作,另外一个NRF24L01直接用USB串口转NRF24L01的...
STM32驱动NRF24L01一对多的通信---可变数据包宽度
既然是一对多可变payload宽度的通信,肯定是包含两个方面: n(1)能一对多通信(同个频道下一般最多是一对六) n(2)发送的数据包的payload是可变的 n配置NRF24L01进行一对多通信,前提是一对一通信必须要清楚。 n我个人的理解是这样的PTX端需要配置的地址TX_ADDR和RX_ADDR nPRX端需要配置的地址RX_ADDR n至于以上地址在这个机制中是怎么用的,为什么会相同,下面
基于Domoticz智能家居系统(十五)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(一)关于MySensors
我们将用一套ESP8266+NRF24L01来完成一个基于MySensors通信协议的MQTT(通过wifi)和RF射频无线网络的网关。n后面,再用另一套ESP8266+NRF24L01做客户端,来完成和domoticz服务器的通信。
stm32F1,NRF24L01模块无线通信发送失败解决方法【正点原子原码修改】
原码是正点原子的官方例程,对于发送模块,我只是修改了主函数部分。rnrn#include "led.h"n#include "delay.h"n#include "key.h"n#include "sys.h"n#include "lcd.h"n#include "usart.h" n#include "24l01.h" n nnn int main(void)n { n u8 key,m
NRF24L01多对一、多通道通讯关键代码
要想24L01多通道通讯成功,务必单通道先调试成功,并且懂得这块芯片通讯的一些基本知识。一、基本的通讯条件1、接收端的接收地址(RX_ADDR_Px)等于发射端的发射送地址(TX_ADDR) n2、收发端的频道一致(RF_CH) n3、收发端的发射参数一致(RF_SETUP)二、收发模式初始化的基本步骤Rx端初始化步骤: n1)写 Rx 节点的地址 RX_ADDR_Px n2)使能 AUTO ACK
关于征求《收费公路联网收费多义性路径识别复合通行卡(CPC)技术要求(征求意见稿)》等标准意见的函(1)
关于征求《收费公路联网收费多义性路径识别复合通行卡(CPC)技术要求(征求意见稿)》等标准意见的函(1)
NRF24L01中断双向传输数据
NRF24L01是一款比较常见的无线通讯芯片,不过有个缺点就是只能半双工通讯,当涉及到双向通讯时就比较麻烦一些·,特别是想要做无线IAP数据需要一直来回发送,这点无疑然人恶心到想吐,不过还好有数据中断可以用来做切换。nn前些时间做的无线IAP用到双向通讯,现在分享如下nn nn本文转移到nnhttps://shaynerain.com/nrf24l01中断双向传输数据/nn nn nnn闻道有先后...
【17】宝马1768_NRF24L01(2014.05.10)
宝马LPC 1768_NRF24L01
Arduino通过nrf24l01与树莓派通信,并通过蓝牙转发给安卓手机
本科毕设通信模块,首次嵌入式工程尝试,集CSDN众多大家之成果,期间依旧遇坑无数,在此Mark,以便后续参考。nn通信过程大致描述如下:树莓派通过2.4GHz廉价模块nrf24l01,发送无线数据给同样连接nrf24l01模块的Arduino模块,Arduino通过串口蓝牙将数据转发给安卓手机。nn本文将分别记录以上通信实现过程,着重描述遇到的问题与解决方法。期间参考前辈教程攻略如下:nnNF库:...
主控芯片stm32f103c8t6 NRF24L01 使用IRQ处理收发中断,六发一收。。。。。。。。。
NRF24L01 使用IRQ处理收发中断,六发一收 NRF24L01 使用IRQ处理收发中断,六发一收
nrf24L01接收端只触发一次中断解决办法
曲曲折折一个月,终于找到具体原因了,中途虽然能接收到数据,但是总是感觉心里有个梗,不爽。。。nNrf24L01接收端接收不到数据、接收数据不稳定、中断只触发一次等等,都可能是这个原因。n我们都知道,接收端接收到数据,处理完数据后要清空接收反冲区。FLUSH_RX:清空RXn FIFO寄存器。nnNRF2_SPI_WriteReg(FLUSH_RX,0xFF);  //清除RX FIFO寄
关于NRF24L01只能接收一次数据问题的解决办法
最后在调试NRF24L01的时候,发现发送端在发送了一次数据之后就不能再发送数据了,只能重新接收端和发送重新上电才能再次发送,不过重新上电后这个问题还是存在,后来发现如果接收端的接收缓存区如果满了之后,就不会再接收下一个数据了,也就是再也不会应答发送端了,这就导致了发送端接收不到自动应答,也就是一直发送失败了,解决办法就是在接收端接收完数据之后及时地清空接收缓存区,这个问题就不存在了。
关于2.4G(NRF24L01+)频谱仪的探讨,和移植stm32版本
首先我也不是什么大神,也只是一个刚毕业不久的菜鸟而已,有那里说的不对,大神们可以指出。rn一次无意的发现了这个有趣的东西,应为之前我也使用过nrf24l01开发过一款遥控主要产品,所以我对这个东西特别感兴趣,特别想了解其中的原理,因为在我使用的过程中没有发现nrf24l01这款无线模块有RSSI(信号强度)这个功能,这就让我更加好奇了。它是怎么检测频道的占用和信号的强度。我疯狂的寻找nrf24l0
关于NRF24L01模块使用的部分个人总结
1.首先,NRF24L01是一个基于2.4GHZ的射频模块,增强型的具有更好的稳定性。rn2.NRF使用的是SPI协议来进行操作,所以,需要理解SPI的几个输入输出口,再加以正确的时序操作,即可以操作NRFrn3.对NRF的操作,总体上的是,使用SPI的六根线,IRQ,MISO,MOSI,SCK,CSN,CE对NRF中的寄存器进行操作以及状态的转换。rn4.SPI传输一组数据是使用交换的方式,即,
arduino的nrf24L01收发通信
最近弄了两个nrf24l01的模块,想试试之后往智能家居上用,正好之前有一个小车用来验证导航算法的,还有一个小四轴的控制手柄,所以萌生了结合三者弄个遥控车玩一玩。小四轴基于STC15系列主控,51架构,而小车主控是arduino平台,那么nrf24l01的代码就需要分开写。nrf24l01采用SPI总线通信,虽然占引脚数多,但是收发速度快,模块通信速率可达2Mbps,而功耗控制在待机22uA,如果...
基于51单片机的NRF24L01的使用笔记
1、NRF24L01 n n我用的就长这个样子~~~2.管脚功能 n3、51单片机的I/O口输出为5V,而NRF24L01的电源输入为1.9—3.6V,如果直接接入单片机的电源会烧坏模块,因而要对单片机的电源接口进行压降,这里我选用二极管进行压降,二极管型号为IN4001. n n n工欲善其事,必先利其器。这一步完成之后就可以把引脚用杜邦线连接到单片机的I/O口,定义管脚就可以开始编程了。4、要用
NRF24L01收发测试程序
调试好了NRF24L01的程序,前几天一直接收不到,今天发现是寄存器设置错误,更新最新调试好的程序:nnn接收:nn#include "include.h"nnunsigned char sta; // 状态变量 nunsigned char rx_dr_flag;//接收成功标志位nn#define RX_DR (sta & 0x40) // 接收成功中断标志n#define
nRF24L01 使用心得
为了方便大家测试程序,先将程序开发环境说明一下,程序是在 STC15W4K56S4 上开发的,开发板,nRF24L01 无线模块都是某宝淘来的.nn nnn原理图 PDF: https://download.csdn.net/download/longzhishen/10407195nnn硬件准备就绪后,开始写程序 n打开 n新建一个项目 n n n n nnnn好,项目新建好了,现在开...
nrf24l01使用与调试经验总结
最近的项目用到了NRF芯片,进过几天的奋战总算是将所有的坑都填满了。nn--------------------------------------------------------华丽的分割线(以下介绍NRF特性)---------------------------------------------------------------------nn主要特性工作在 2.4GHz ISM 频...
关于nRF24L01地址问题
关于nRF24L01地址设置的问题
2.4G模块NRF24L01调试经验
参照野火STM32程序调试NRF24L01成功,颇获喜感rnnRF24L01是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBurstTM模式控制器、功率放大器、警惕振荡器、调制器、解调器。输出功率、频道选择和协议的设置可以通过SPI接口进行设置。rn模块外形图如下图所示:                 PCB和引脚示意图如下
NRF24L01的使用方法
要实现nRF24L01的ACK PAYLOAD功能需要经过以下步骤:rn首先进行无线模块的基本配置,包括发送接收模式的选择(CONFIG)——收发模式、配置模式、空闲模式、关机模式。rn  开启自动重传功能(EN_AA)、rn  接收地址使能(EN_ADDR)、rn  设置重传时问不为零(SET-UP RETR)等;然后同时开启DPL和ACK PAYLOAD功能,要实现这两个功能,必须在完成第一步
nrf51822与nrf24l01之间的无线通讯
nrf51822和nrf24l01同属于nordic公司下的产品,在射频方面能够做到兼容,但是开发过程中遇到一些问题,特此做个记录想要两者能够互相通讯,需要注意一下一些配置 n1. 白化: nrf51822的射频为了提高抗干扰能力,加入白化功能,但是nrf24l01没有此功能,所以nrf51822端必须关闭(PCNF1.WHITEEN = 0),否则引起数据乱码。 n2. 地址长度:地址长度两者都
nrf24L01多发一收调试心得
背景rn 近期项目中要应用到一个多发一收通信场景,考虑到成本及功能问题,最后决定使用nrf24L01模块。经过多次的踩坑最终实现了相应的通信功能,现将相关的调试心得分享一下,留作笔记,同时也希望能帮助到其他初次使用该模块的朋友。rnrn注意事项rn遵循先调试好发送端再调试接收端的原则。具体的调试方法及例程网上都有现成的,所以这里只讲一些注意事项。rnrnrn学会利用STATUS状态寄存器,这里我们在进行调试的时...
NRF24l01实时双向通信程序(STM32与51单片机通讯)
NRF24l01实时双向通信(stm32与51),实现STM32与51单片机的铜须 功能
2.4G NRF24L01无线模块总结
前言  最近野火STM32论坛(www.firebbs.cn)发起了一个开源平衡车的项目,于是就跟着大家一起动手做起了开源平衡车,其中就用到了2.4G NRF24L01无线模块。通过对NRF24L01中英文手册的参考,对其做如下总结,将主要的知识点以博客的形式呈现出来。如果想要对NRF24L01进行更深入的理解,还请以中英文手册为主(本博文内容都能在中英文手册中找到)。一、概述   NRF24
Arduino NRF24L01无线收发模块完整例子
Arduino NRF24L01无线收发模块完整例子,包含源代码,库文件,上位机
STM32+NRF24L01 发送端,发送数据,返回0x10,即一直返回最大重发次数值。但接收端能接收到数据。
现象:发送端发送数据,接收端能接收到。 但发送端判断为发送失败,查看返回值为0X10。nn即NRF24L01_TxPacket(tmp_buf)的值为0X10,TX_OK值为0X20,故虽然接收端能收到数据。但 发送端显示“发送失败”nnnn  深入查看“NRF24L01_TxPacket(tmp_buf)”函数。nnprintf显示,state的值为0X1e,不是正常值0X2e。nnnn原因:n...
关于NRF24l01调试能发送但收不到自动应答
因为我是用的电脑USB供电,所以后面发现使用USB供电会导致NRF24L01接收不正常。这是我自己出现的问题。。。希望能帮助到同样出现问题的小伙伴。。。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算