OpenEdv-开源电子网

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

NRF24l01 ACK不稳定

[复制链接]

26

主题

202

帖子

3

精华

高级会员

Rank: 4

积分
808
金钱
808
注册时间
2014-3-4
在线时间
10 小时
发表于 2014-4-19 03:41:04 | 显示全部楼层 |阅读模式
调试的NRF24l01 ACK 很不稳定,时有时无,但是数据确实已经成功被接受<br />
读取丢包计数器居然也是0,不知为何,论坛里好多程序都把ack去掉了,<br />
不知道这个是什么原因,
随遇而安,无愧于心?---?行者?任
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

202

帖子

3

精华

高级会员

Rank: 4

积分
808
金钱
808
注册时间
2014-3-4
在线时间
10 小时
 楼主| 发表于 2014-4-19 12:20:24 | 显示全部楼层
问题以解决,发送方用的stc12的芯片5v我测试时临时给加了2个二极管,电源稳定性不好,今天加了稳压和滤波进去100%有ack。ok了
随遇而安,无愧于心?---?行者?任
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-4-19 16:39:01 | 显示全部楼层
恭喜
回复 支持 反对

使用道具 举报

26

主题

202

帖子

3

精华

高级会员

Rank: 4

积分
808
金钱
808
注册时间
2014-3-4
在线时间
10 小时
 楼主| 发表于 2014-4-19 17:43:05 | 显示全部楼层
回复【3楼】正点原子:
<br>---------------------------------
<br>1,多谢原子哥,无线的程序是以前调过的,只不过这次是在51和stm32中间,看坛子里好多朋友说51和stm32的24l01通信有问题,感觉没什么区别,只有spi读写操作部分不一样,其他都一模一样,24l01的设置和通信操作直接复制过去就ok了,
<br>2,要注意的就是发送方的mcu速度如果比接受的快太多就得在程序里处理下,要不数据会来不及接受而拥堵出错!
<br>3,希望对后面的朋友有帮助。
随遇而安,无愧于心?---?行者?任
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-4-19 23:22:01 | 显示全部楼层
回复【4楼】rengaopan:
<br>---------------------------------
<br>谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-12-28
在线时间
0 小时
发表于 2014-4-19 23:32:38 | 显示全部楼层
这个问题最近也刚遇到了 ,我也同样是STC12le5A60S2 ,用的 硬件SPI与战舰板通讯,发送一会儿成功一会儿失败,而且发现当STC板的电源从战舰板引出来的话就没问题,后来在STC板上加一电容滤波搞定<br />
以下附STC12硬件SPI的驱动,很简单,而且与战舰例程直接兼容<br />
<br />
SPI.C :<br />
<br />
#include "SPI.h"<br />
#include &lt;STC12.h&gt;<br />
<br />
void SPI_Init(void)<br />
{<br />
AUXR1 |= 0x20;                                                        &nbsp;<br />
SPCTL = 0XD0;<br />
SPSTAT |= 0xC0;<br />
}<br />
<br />
unsigned char SPI2_ReadWriteByte(unsigned char TxData)<br />
{<br />
<br />
SPDAT= TxData; //将串口接收的数据装入SPI数据寄存器<br />
while(!SPIF);//等待发送完毕<br />
SPSTAT = 0xc0; //清除中断标志,和写冲突标志,注意是对应位写1才能清零<br />
TxData = SPDAT;<br />
return &nbsp;TxData; &nbsp; &nbsp; &nbsp; &nbsp;<br />
}<br />
<br />
SPI.H :<br />
<br />
#ifndef __SPI_H__<br />
#define __SPI_H__<br />
<br />
#define SPIF &nbsp;(SPSTAT &amp; 0x80)<br />
<br />
void SPI_Init(void);<br />
unsigned char SPI2_ReadWriteByte(unsigned char TxData);<br />
<br />
#endif<br />
<br />
<div>
        <br />
</div>
我不会告诉你你也是大神的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-4-20 00:06:21 | 显示全部楼层
回复【6楼】腾飞mp9:
<br>---------------------------------
<br>谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

110

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2013-9-16
在线时间
0 小时
发表于 2014-12-25 10:25:45 | 显示全部楼层
您好,你用过无线吗,最新推荐WLK01L39无线应用首选-隔墙效果极佳
<br>样品75折体验:http://item.taobao.com/item.htm?id=36264057764
<br>选购3个WLK01L39以上即可免费获取测试板:http://item.taobao.com/item.htm?id=40102876157批量更优惠
<br>WLK01L39开发包资料百度网盘下载连接:http://pan.baidu.com/s/1Go9YI
<br>无线数据传输方面的有空看看,欢迎交流
<br>
<br>基本工作原理:
<br>模块平时处于接收状态,一旦收到数据,就把收到的数据通过UART输出,这时你可以用单片机来个中断接收函数啊,把数据读取存储,
<br>发送数据的时候把要发的数据通过UART送给模块,他就自动发送,发送完毕,自动切换到接收模式
<br>
<br>====================================================================
<br>例如跳频多点通讯,
<br>====================================================================
<br>例如
<br>当主机为WLK01L39模块,且主机节点A频率值为470MHZ(470000转换为16进制为:0x07&nbsp;0x2B&nbsp;0xF0),
<br>&nbsp;
<br>从机B频率参数:471MHZ(0x07&nbsp;0x2f&nbsp;0xD8)&nbsp;,从机C频率参数:472MHZ(0x07&nbsp;0x33&nbsp;0xC0)
<br>主机可以通过切换频率参数来分别和B&nbsp;C节点通讯,方法如下
<br>&nbsp;
<br>第一步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第二步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x9F&nbsp;0x00&nbsp;0x03&nbsp;0x07&nbsp;0x2f&nbsp;0xD8
<br>第三步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;0x07&nbsp;0x2f&nbsp;0xD8&nbsp;后再设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第四步-&gt;&nbsp;输入要传的数据即可将数据传输给B节点
<br>&nbsp;
<br>&nbsp;
<br>第五步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第六步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x9F&nbsp;0x00&nbsp;0x03&nbsp;0x07&nbsp;0x33&nbsp;0xC0
<br>第七步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;0x07&nbsp;0x33&nbsp;0xC0后再设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第八步-&gt;&nbsp;输入要传的数据即可将数据传输给C节点
<br>&nbsp;
<br>更多节点以此类推即可
<br>&nbsp;
<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<br>例如变址多点通讯,
<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<br>&nbsp;
<br>例如
<br>当主机为WLK01L39模块,
<br>主机A本机地址1:0x01,本机地址2:0x01,
<br>从机B本机地址1:0x02&nbsp;,本机地址2:0x01&nbsp;,
<br>从机C本机地址1:0x03,本机地址2:0x01&nbsp;,&nbsp;&nbsp;
<br>主机可以通过切换目标地址参数来分别和B&nbsp;C节点通讯,因为在频率一样的前提下
<br>只有主机的目标地址和从机的本机地址一致时,对应从机才能与其建立通讯,并接收数据方法如下
<br>&nbsp;
<br>第一步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第二步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x8E&nbsp;0x00&nbsp;0x01&nbsp;0x02&nbsp;
<br>第三步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;&nbsp;0x02&nbsp;后再&nbsp;设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第四步-&gt;&nbsp;输入要传的数据即可将数据传输给B节点
<br>&nbsp;
<br>&nbsp;
<br>第五步-&gt;&nbsp;设置电平SETA=1&nbsp;SETB=1&nbsp;进入参数设置模式
<br>第六步-&gt;&nbsp;0xFF&nbsp;0x56&nbsp;0xAE&nbsp;0x35&nbsp;0xA9&nbsp;0x55&nbsp;0x8E&nbsp;0x00&nbsp;0x01&nbsp;0x03
<br>第七步-&gt;&nbsp;等待返回0x24&nbsp;0x24&nbsp;0x24&nbsp;&nbsp;0x03&nbsp;后再设置电平SETA=0&nbsp;SETB=0&nbsp;进入正常收发模式
<br>第八步-&gt;&nbsp;输入要传的数据即可将数据传输给C节点
<br>&nbsp;
<br>更多节点以此类推即可
<br>&nbsp;
<br>###################################################################
<br>多点通讯还有一种最简单的方式,就是点名通讯
<br>###################################################################
<br>1.主机和从机的参数都完全一样
<br>2.都处于正常收发模式
<br>3.当主机A发0x01(该指令可自定义),
<br>&nbsp;&nbsp;当从机B和从机C都收到0x01,
<br>&nbsp;&nbsp;从机B视0x01为上传数据命令,立刻发射要上传数据,然后主机A会收到B上传数据,而从机C视0x01为无效指令,不发送数据
<br>&nbsp;&nbsp;当主机A发0x02(该指令可自定义),
<br>&nbsp;&nbsp;当从机B和从机C都收到0x01,
<br>&nbsp;&nbsp;从机C视0x02为上传数据指令,立刻发射要上传数据,然后主机A会收到C上传数据,而从机B视0x02为无效指令,不发送数据
<br>更多节点以此类推即可
<br>------------------
<br>NRF905&nbsp;RF903&nbsp;CC1100&nbsp;CC2500&nbsp;CC1020&nbsp;NRF2401&nbsp;NRF24L01&nbsp;无线数传芯片/模块性能汇总及应用指南
<br>你好,我们是无线制造供应商,欢迎交流
<br>QQ:35625400&nbsp;&nbsp;&nbsp;&nbsp;MSN:ll88mm88@hotmail.com&nbsp;
<br>HONE:13704018223&nbsp;&nbsp;&nbsp;陈工
RFinchina 团队欢迎无线方面的技术交流 QQ 474882985
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-4-3
在线时间
0 小时
发表于 2015-4-3 17:03:29 | 显示全部楼层
回复【2楼】rengaopan:
<br>---------------------------------
<br>楼主,实在是太谢谢你了,我的就是加了一个电容,立马就好使了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-4-3
在线时间
0 小时
发表于 2015-4-3 17:03:48 | 显示全部楼层
回复【9楼】NinthCode:
<br>---------------------------------
<br>新注册了一个账号来谢谢你。。。。。。
回复 支持 反对

使用道具 举报

13

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2013-11-12
在线时间
29 小时
发表于 2015-5-14 05:34:45 | 显示全部楼层
回复【9楼】NinthCode:
<br>---------------------------------
<br>话说我也遇到这个问题了,请问哈电容怎么加的啊
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2015-10-30
在线时间
66 小时
发表于 2015-12-11 16:42:26 | 显示全部楼层
哥们&nbsp;&nbsp;&nbsp;&nbsp;我是速度太快造成拥堵。&nbsp;看到你的总结之后&nbsp;&nbsp;&nbsp;改了一下&nbsp;&nbsp;成功了&nbsp;&nbsp;谢谢楼主
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-1-19
在线时间
4 小时
发表于 2015-12-29 16:39:49 | 显示全部楼层
哥们,那你有没有试过用全5的地址来调,我用这个地址去调试老是接收不到需要不断重发菜接收得到,自然ACK也是没有的,真是醉了
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-1-19
在线时间
4 小时
发表于 2015-12-29 17:09:04 | 显示全部楼层
小猛 发表于 2015-12-11 16:42
哥们&nbsp;&nbsp;&nbsp;&nbsp;我是速度太快造成拥堵。&nbsp;看到你的总结之后&nbsp;&nbsp;&nbsp;改了一下&n ...

哥们我遇到跟你一样的问题,可以请教下吗?
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2015-10-30
在线时间
66 小时
发表于 2016-1-20 20:33:30 | 显示全部楼层
p422984186 发表于 2015-12-29 17:09
哥们我遇到跟你一样的问题,可以请教下吗?

怎么了
回复 支持 反对

使用道具 举报

7

主题

61

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2016-3-1
在线时间
76 小时
发表于 2016-6-4 17:39:50 | 显示全部楼层
mande 发表于 2014-4-19 17:43
回复【3楼】正点原子:
---------------------------------
1,多谢原子哥,无线的程序是以前调过的,只不过 ...

请问楼主stm>>51,这样51偏慢,如何在51中协调动作顺序,
51的程序中,如何协调 外部中断-串口中断,让数据更快的传递?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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