OpenEdv-开源电子网

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

NRF24L01接受和发送模式的转换

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2010-12-16
在线时间
0 小时
发表于 2011-4-26 16:28:13 | 显示全部楼层 |阅读模式
<p>&nbsp;我用51和STM32做无线收发,如果STM32一直做接受那么数据正确,但是现在我想改成STM32接受到一个数据之后就转换到发送模式,发出一个数据后再转换回接受模式。</p>
<p>从接受转到发送都正常,51能收到数据,但是再转换回接受就不行了,好像中断引脚一直是低电平,但是我把它拔出来,然后再插进去,就又可以接收了,<br />
请问有没有人知道原因?</p>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-4-26 16:44:02 | 显示全部楼层
回复【楼主位】Yetu:
<br>-------------------------------
<br>NRF24L01貌似容易死.不过我的代码里面有一处小BUG,不知道是不是和这里有关.就是SPI初始化,那个CPOL啥的设置错了.我在调试豪华版的代码的时候才发现这个问题.很怪异的.同样的设置,在mini板上可以用,在豪华版上就不能.调了我一天多....最后发现是SPI初始化有问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2010-12-16
在线时间
0 小时
 楼主| 发表于 2011-4-26 16:51:19 | 显示全部楼层
那CPOL怎么设啊?我是这样的
<br>        SPI2-&gt;CR1|=0&lt;&lt;1;&nbsp;//空闲模式下SCK为1&nbsp;CPOL=0
<br>        SPI2-&gt;CR1|=0&lt;&lt;0;&nbsp;//数据采样从第二个时间边沿开始,CPHA=0&nbsp;&nbsp;
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-4-26 17:58:10 | 显示全部楼层
SPI2-&gt;CR1|=0&lt;&lt;1;&nbsp;//空闲模式下SCK为1&nbsp;CPOL=0&nbsp;
<br>SPI2-&gt;CR1|=0&lt;&lt;0;&nbsp;//数据采样从第二个时间边沿开始,CPHA=0&nbsp;&nbsp;
<br>你的是对的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
发表于 2011-11-30 17:35:42 | 显示全部楼层
回复【4楼】正点原子:
<br>---------------------------------
<br>SPI2-&gt;CR1|=0&lt;&lt;1;&nbsp;&nbsp;&nbsp;这句有用吗?&nbsp;|0&nbsp;不是没有操作吗?我老是不明白这句话的意思。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-11-30 18:11:38 | 显示全部楼层
回复【5楼】esteem:
<br>---------------------------------
<br>方便阅读.通过这句话,你知道BIT0是设置CPOL的极性的.如果某天你要设置CPOL=1,那么你直接修改0为1即可.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-1-16
在线时间
0 小时
发表于 2012-8-28 09:20:01 | 显示全部楼层
回复【2楼】正点原子:
<br>回复【楼主位】Yetu:&nbsp;-------------------------------&nbsp;NRF24L01貌似容易死.不过我的代码里面有一处小BUG,不知道是不是和这里有关.就是SPI初始化,那个CPOL啥的设置错了.我在调试豪华版的代码的时候才发现这个问题.很怪异的.同样的设置,在mini板上可以用,在豪华版上就不能.调了我一天多....最后发现是SPI初始化有问题.
<br>---------------------------------
<br>请教原子,你指的“NRF24L01貌似容易死”是指死机么?我现在是通过不断切换NRF24L01的接收发送模式来实现双向通信的,但有的时候会出现接收端突然收不到发送端的数据的现象,经证实发送端还是正常在发送,应该是接收端的问题,此时必须断电重启才能恢复正常的通信,请问,遇到这种状态有没有什么解决办法?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-8-28 09:41:01 | 显示全部楼层
&nbsp;&nbsp;        RCC-&gt;APB2ENR|=1&lt;&lt;3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能PORTB时钟&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;        RCC-&gt;APB2ENR|=1&lt;&lt;5;                //使能PORTD时钟
<br>&nbsp;        RCC-&gt;APB2ENR|=1&lt;&lt;8;                //使能PORTG时钟
<br>        //这里pb12和pd2拉高,是为了防止互相影响&nbsp;.
<br>        //因为他们共用一个SPI口.&nbsp;        &nbsp;
<br>        GPIOB-&gt;CRH&=0XFFF0FFFF;&nbsp;
<br>        GPIOB-&gt;CRH|=0X00030000;        //PB12&nbsp;推挽&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>        GPIOB-&gt;ODR|=1&lt;&lt;12;&nbsp;&nbsp;&nbsp;&nbsp;        //PB12上拉&nbsp;防止W25X的干扰
<br>                                &nbsp;&nbsp;&nbsp;
<br>        GPIOD-&gt;CRL&=0XFFFFF0FF;&nbsp;
<br>        GPIOD-&gt;CRL|=0X00000300;        //PD2&nbsp;推挽&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>        GPIOD-&gt;ODR|=1&lt;&lt;2;&nbsp;&nbsp;&nbsp;&nbsp;        //PD2上拉&nbsp;&nbsp;&nbsp;禁止SD卡的干扰
<br>
<br>        GPIOG-&gt;CRL&=0X00FFFFFF;&nbsp;
<br>        GPIOG-&gt;CRL|=0X33000000;        //PG6&nbsp;7&nbsp;推挽&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>        GPIOG-&gt;CRH&=0XFFFFFFF0;&nbsp;
<br>        GPIOG-&gt;CRH|=0X00000008;        //PG8&nbsp;输入&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>        GPIOG-&gt;ODR|=7&lt;&lt;6;&nbsp;&nbsp;&nbsp;&nbsp;        //PG6&nbsp;7&nbsp;8&nbsp;上拉        &nbsp;&nbsp;&nbsp;
<br>
<br>        SPI2_Init();&nbsp;&nbsp;&nbsp;&nbsp;                //初始化SPI        &nbsp;&nbsp;
<br>        //针对NRF的特点修改SPI的设置
<br>&nbsp;        SPI2-&gt;CR1&=~(1&lt;&lt;6);&nbsp;        //SPI设备使能
<br>        SPI2-&gt;CR1&=~(1&lt;&lt;1);&nbsp;        //空闲模式下SCK为0&nbsp;CPOL=0
<br>        SPI2-&gt;CR1&=~(1&lt;&lt;0);&nbsp;        //数据采样从第1个时间边沿开始,CPHA=0&nbsp;&nbsp;
<br>        SPI2-&gt;CR1|=1&lt;&lt;6;&nbsp;                //SPI设备使能
<br>       
<br>        NRF24L01_CE=0;&nbsp;                        //使能24L01
<br>        NRF24L01_CSN=1;                        //SPI片选取消
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-4-7
在线时间
0 小时
发表于 2012-9-30 10:49:10 | 显示全部楼层
回复【8楼】正点原子:
<br>---------------------------------
<br>原子哥中秋快乐哈,想问一个问题和楼上的差不多我的NRF24L01采用一主多从的,主机发送完后要切换到接收模式接收从机返回的信息,我现在的问题是发送完了之后切换回接收模式后,在发送就发送不出去了,如果只发送不切换回接收就没事,从机收到能够返回,每次都正常。不知道什么原因原子哥,谢谢
回复 支持 反对

使用道具 举报

14

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2013-11-10
在线时间
10 小时
发表于 2014-3-27 20:50:44 | 显示全部楼层
原子哥可不可以说一下这个错误在寄存器版本的demo的什么位置啊,我也遇到了相同的问题,我用stm32主动发送数据,单片机收到以后再转换成发送模式返回其他的数据,这时候stm32转为接收,有的时候单片机就会莫名其妙的收不到数据了,而且一直接收不到了,只有重新给单片机的nrf24l01重新上电才行。这是代码的问题啊,还是芯片的性能问题啊
<br>我还听说好像nrf在转换模式的时候需要有一个时间间隙,是这样吗,如果有,至少多大才行啊?跪求原子哥解答,谢谢啊
回复 支持 反对

使用道具 举报

14

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2013-11-10
在线时间
10 小时
发表于 2014-3-27 20:51:33 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>原子哥可不可以说一下这个错误在寄存器版本的demo的什么位置啊,我也遇到了相同的问题,我用stm32主动发送数据,单片机收到以后再转换成发送模式返回其他的数据,这时候stm32转为接收,有的时候单片机就会莫名其妙的收不到数据了,而且一直接收不到了,只有重新给单片机的nrf24l01重新上电才行。这是代码的问题啊,还是芯片的性能问题啊&nbsp;
<br>我还听说好像nrf在转换模式的时候需要有一个时间间隙,是这样吗,如果有,至少多大才行啊?跪求原子哥解答,谢谢啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-6-19
在线时间
0 小时
发表于 2014-7-15 00:25:22 | 显示全部楼层
回复【8楼】正点原子:
<br>---------------------------------
<br>对应的库函数的修改是怎样的???请原子哥解答
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-17 23:59:33 | 显示全部楼层
回复【13楼】leilei4908:
<br>---------------------------------
<br>请参考我们库函数版本的例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-9-3
在线时间
0 小时
发表于 2014-9-3 15:01:26 | 显示全部楼层
请问原子哥: 我现在也遇到了同样的问题。
<div>
        &nbsp;DSP和STM32作为两边的MCU,作为 单纯的收或者发 可以。<br />
但是我现在要自己控制发送与应答:DSP发完了,stm32收到后。双方切换收发模式,stm32发送,dsp能收到;但是DSP再次发送的时候,stm32收不到了------只有将stm32重新启动(调试环境)后,才能收到。&nbsp;&nbsp;<br />
每次都是这样的。&nbsp;<br />
请问问题可能是由什么原因造成的?谢谢。
</div>
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-9-3
在线时间
0 小时
发表于 2014-9-3 15:01:53 | 显示全部楼层
回复【14楼】正点原子:
<br>请问原子哥:&nbsp;我现在也遇到了同样的问题。
<br>&nbsp;DSP和STM32作为两边的MCU,作为&nbsp;单纯的收或者发&nbsp;可以。
<br>但是我现在要自己控制发送与应答:DSP发完了,stm32收到后。双方切换收发模式,stm32发送,dsp能收到;但是DSP再次发送的时候,stm32收不到了------只有将stm32重新启动(调试环境)后,才能收到。&nbsp;&nbsp;
<br>每次都是这样的。&nbsp;
<br>请问问题可能是由什么原因造成的?谢谢。
<br>---------------------------------
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-4 00:22:52 | 显示全部楼层
回复【15楼】时谦:
<br>---------------------------------
<br>可能是切换过程中出的问题,加延时什么的试试看吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2013-7-22
在线时间
3 小时
发表于 2015-4-29 17:12:13 | 显示全部楼层
回复【8楼】正点原子:
<br>---------------------------------
<br>原子哥,这么改就能解决问题吗???用你的mini办测试了一下,照死不误呀!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

19

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2013-7-22
在线时间
3 小时
发表于 2015-4-30 09:42:57 | 显示全部楼层
回复【19楼】正点原子:
<br>---------------------------------
<br>对,是V3.0的mini板,切换模式后能残喘几下,就死掉了,有可靠点的解决方案吗???
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-30 23:23:38 | 显示全部楼层
回复【20楼】有一点心动杜:
<br>---------------------------------
<br>这个没哦,只能慢慢调试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 12:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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