OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6387|回复: 7

原子的例程 探索者+NRF24L01与arduino+NRF24L01通信需要注意什么?

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
25 小时
发表于 2016-6-28 23:22:16 | 显示全部楼层 |阅读模式
8金钱
本帖最后由 slanpo 于 2016-6-29 23:27 编辑

简单看了下原子哥的例程,看不懂的地方太多,简单调试了使用arduino+NRF24L01 发送, 探索者+NRF24L01 接收, 失败。不知道错在哪儿。列出问题,希望大家拉一把小白!


1、arduino中使用的Mirf库,只有简单的基本设置,如接收端ID设置:Mirf.setTADDR((byte *)"Rec01");  //16进制就是 0x52,0x65,0x63,0x30,0x31
   这样我在战舰中修改:const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x52,0x65,0x63,0x30,0x31};
                                          const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x52,0x65,0x63,0x30,0x31};
                                        //原来是{0x34,0x43,0x10,0x10,0x01};代表4C???是这个意思吗???

2、STM32中:NRF24L01_RX_Mode();        不知道还有那些需要修改的不?

3、arduino中我把通道修改成了 40,因为我以为例程使用的就是通道40.NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);

修改了以上几处,通信不成功,不知道如何设置调通,使用的是原子的NRF24L01模块。


arduino中程序:

nRF24L01 Arduino发送端

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup()
{
    Serial.begin(9600);


    Mirf.cePin = 9;                //设置CE引脚为D9
    Mirf.csnPin = 10;        //设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();  //初始化nRF24L01               


        //设置接收标识符"Sen01"
    Mirf.setRADDR((byte *)"Sen01");
   // Mirf.payload = sizeof(unsigned int);
   Mirf.payload = 32;
    //发送通道,可以填0~128,收发必须一致。
    Mirf.channel = 40;
    Mirf.config();
  //  Mirf.configRegister(RF_CH,40);
    Mirf.configRegister(RF_SETUP,0x0f);
        //注意一个Arduino写Sender.ino,另一个写Receiver.ino。
        //这里标识写入了Sender.ino
    Serial.println("I'm Sender...");
}
unsigned int adata = 0;
void loop()
{
    //设置向"serv1"发送数据
    Mirf.setTADDR((byte *)"Rec01");
    Sends("hello hello hello hello hello he");//32
//   Mirf.
    //while死循环等待发送完毕,才能进行下一步操作。
    while(Mirf.isSending()) {}
    delay(20);
}


void Sends(char *str)
{
int lens;
lens=strlen(str);
char msg[lens];
int i;
for (i=0;i<lens;i++)
{
msg= int(str);
}
Mirf.send((byte *)&msg);
while(Mirf.isSending()){}
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
25 小时
 楼主| 发表于 2016-6-29 14:44:01 | 显示全部楼层
本帖最后由 slanpo 于 2016-6-29 23:27 编辑

我又尝试改了几处,还是不行,
另外test.c里面if(NRF24L01_RxPacket(tmp_buf)==0)//如果接收到数据,则显示(怎么有此判断的?tmp_buf==0?)
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
25 小时
 楼主| 发表于 2016-6-29 23:28:54 | 显示全部楼层
自己顶一顶,万一有人拉我一把呢,祝@正点原子 阿波罗大卖~~
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
25 小时
 楼主| 发表于 2016-7-1 12:14:19 | 显示全部楼层
自顶,除了地址,通道,字节,速率,还需要设置什么吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-2 21:07:30 | 显示全部楼层
你先用2个arduino试试看能否通信
回复

使用道具 举报

雨出惊人love 该用户已被删除
发表于 2016-11-7 20:43:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-3-29
在线时间
4 小时
发表于 2017-3-29 23:22:15 | 显示全部楼层
我也在搞这个啊,好不容易搞通STM32间SPI3的,现在arduino就是接收不到,在纠结要不要发送那里就直接也用arduino得了
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2016-1-23
在线时间
25 小时
发表于 2017-5-31 15:58:20 | 显示全部楼层
楼主解决了吗,能给个思路吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表