OpenEdv-开源电子网

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

定义了发送模式就不能再接收了

[复制链接]

10

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2014-8-7
在线时间
4 小时
发表于 2014-8-29 12:34:22 | 显示全部楼层 |阅读模式
5金钱
我的2401模块程序定义成发送模式,成功了,但是让它既发送又接收,它就无法发送信号,希望大神指点一下

最佳答案

查看完整内容[请看2#楼]

虽然我没有用过2401,其他2.4G模块还是用过的,你要先确定你做主机还是从机,如果是主机,检测发送完就等待接收,超时,重新发送,如果是从机,应该处于接收状态,接收完之后,发送一个确认,继续处于接收状态,没有什么不可以的,有例子还搞不出来。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-8-29 12:34:23 | 显示全部楼层
虽然我没有用过2401,其他2.4G模块还是用过的,你要先确定你做主机还是从机,如果是主机,检测发送完就等待接收,超时,重新发送,如果是从机,应该处于接收状态,接收完之后,发送一个确认,继续处于接收状态,没有什么不可以的,有例子还搞不出来。
回复

使用道具 举报

10

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2014-8-7
在线时间
4 小时
 楼主| 发表于 2014-8-29 16:27:26 | 显示全部楼层
回复【2楼】TinyBoy:
---------------------------------
大神,下面是程序,帮忙看一下,谢谢了
主机:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"     
#include "NRF24l01.h"                        
int main(void)
{
 
u8 Tx_Buf1[]={1}; //要发送的数据 1
u8 Rx_Buf[32];//接收数组
   Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化     
LED_Init();         //LED初始化
NRF24L01_Init();    //初始化NRF24L01      
while(NRF24L01_Check())//检测不到24L01
{
LED1=1;
}
   //初始 DS1熄灭
TX_Mode(); //发送模式 
NRF24L01_TxPacket(Tx_Buf1); // 发送命令数据
NRF24L01_Init();
while(NRF24L01_Check())//检测不到24L01
{
LED1=1;
}
RX_Mode();
while(NRF24L01_RxPacket(Rx_Buf));//等待接收数据 ,返回0则接收到数据 ,在等待接收数据期间,可以随时变成发送模式  
if(Rx_Buf[0]==2)
{
while(1)
{
LED1=0;
delay_ms(200);
LED1=1;
delay_ms(200);
}
}        
}
从机:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"     
#include "NRF24l01.h"                        
int main(void)
{  
u8 Rx_Buf[32]; //接收到的数据  最多32字节
u8 Tx_Buf1[]={2};
   Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化     
LED_Init();         //LED初始化
NRF24L01_Init();    //初始化NRF24L01 
     
while(NRF24L01_Check())//检测不到24L01
{
LED0=1;
}
RX_Mode();//接收模式 
while(NRF24L01_RxPacket(Rx_Buf));//等待接收数据 ,返回0则接收到数据 ,在等待接收数据期间,可以随时变成发送模式  
if(Rx_Buf[0]==1)    //若接收到对应的数据则实现对应功能 
{LED0=0;}
 Rx_Buf[0]=0;//清空数据
 NRF24L01_Init();
 TX_Mode(); //发送模式
while(1)
{
    NRF24L01_TxPacket(Tx_Buf1); // 发送命令数据
 }
}
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-8-29 16:37:54 | 显示全部楼层
回复【3楼】中北的秋雨:
---------------------------------
 反正你要保证,一个发送的时候,另外一个处于接收,你的从机,在接收到数据之后变成发送端之前,你要确保主机已经处于接收状态了。如果你的代码没有问题的话,可能就是你一端发送完了,另外一端还没有处于接收状态。
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-8-29 16:46:27 | 显示全部楼层
回复【4楼】TinyBoy:
---------------------------------
给个接收的例子给你参考一下,这里你可以看到,从机没接收到数据之前都是处于接收状态,接收到数据之后,要延迟一段时间才设置为发送状态,以确保主机已经处于接收状态,它一发送完数据,立马处于接收状态,等待接收数据,其中task1TimeDly就是延时变量,做延时计数用的。
if(fRFReceive)
 { 
                   if(A7105_RF_Slaver_Receive(receiveBuff,3,&task1TimeDly))
                   {
                        //receive completed and CRC is OK.
                        if(receiveBuff[0]==0x01)//checkout is OK,and then send the confirm code.
                        {           
                                 receiveBuff[0]=NULL;
                                 receiveBuff[1]=NULL; 
                                 receiveBuff[2]=NULL; 
                                 ORTB.2=~PORTB.2;  
                                 fRFReceive=false;  
                        }              
                   }
}
 else
 {
                         if(A7105_RF_Slaver_Send(sendBuff,1,&task1TimeDly))//send completed or timeout
                         {
                                fRFReceive=true;       
                         }
}
回复

使用道具 举报

10

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2014-8-7
在线时间
4 小时
 楼主| 发表于 2014-8-30 11:30:16 | 显示全部楼层
回复【5楼】TinyBoy:
---------------------------------
谢谢大神
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-2 04:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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