OpenEdv-开源电子网

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

NRF24L01的问题,解决十块钱话费

[复制链接]

14

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2016-7-27
在线时间
73 小时
发表于 2016-7-27 15:40:59 | 显示全部楼层 |阅读模式
配置正常,发送数据接收端已经接受,也产生的接收中断,可是发送端却收不到回复,以至于发送溢出中断,但是明明两边都开启了所有中断,开了所用通道的自动应答
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2016-7-27
在线时间
73 小时
 楼主| 发表于 2016-7-27 15:44:14 | 显示全部楼层
本帖最后由 诸葛亮的哥哥 于 2016-7-27 15:45 编辑

NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,addr,RX_ADR_WIDTH);        NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x3F);                 
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); /         
NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x2A);//         
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,02);      
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0B);            
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0A);           
NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,0x7E);//              
NRF24L01_Write_Reg(FLUSH_TX,0xff);



回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-1-1
在线时间
12 小时
发表于 2016-7-27 20:53:17 | 显示全部楼层
检查接收机第地址对不对了
回复 支持 反对

使用道具 举报

12

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2015-12-26
在线时间
115 小时
发表于 2016-7-27 21:48:46 | 显示全部楼层
自动应答ack,通道0地址要跟发送地址一样,发送完后,设置为接收模式时重新设置通道0地址
回复 支持 反对

使用道具 举报

12

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2015-12-26
在线时间
115 小时
发表于 2016-7-27 21:51:32 | 显示全部楼层
//发送数据
u8 NRF_SendPayload(const u8 ack,const  u8 *addr,const  u8 channel,const  u8 *buf)
{
        u16 i=1;
        NRF_CE = 0;
        NRF_WriteBuf(W_REGISTER+TX_ADDR, addr, MAC_LEN);//写TX节点地址
        if(ack)
        {
                NRF_WriteBuf(W_REGISTER+RX_ADDR_P0, addr, MAC_LEN);//写通道0,RX地址
        }
        NRF_WriteReg(W_REGISTER+RF_CH, channel);//设置RF通信频率
        NRF_WriteReg(FLUSH_TX, 0xff);//清发送FIFO
        NRF_WriteBuf(W_TX_PAYLOAD, buf, PAYLOAD_LEN);
        NRF_WriteReg(W_REGISTER+CONFIG, 0x0A);//RX_DR,TX_DS,MAX_RT中断使能,CRC:8,POWER_UP,发送模式
        NRF_CE = 1;//设置CE为高启动发射,CE高电平持续时间最小为10us
        NRF_DelayUs(10);
#ifdef DEBUG
        TIM_MeasureStart();//开始计时
#endif
        while(i++)
        {
                if(TranFinish_flag)
                {
                        TranFinish_flag = 0;
#ifdef DEBUG
                        TIM_MeasureStop();//计算发送时间
                        printf("TranFinish\r\n");
#endif
                        return TRUE;
                }
                if(Timeout)
                {
#ifdef DEBUG
                        printf("MAX_RT\r\n");
#endif
                        Timeout = 0;
                        NRF_WriteReg(FLUSH_TX, 0xff);//清发送FIFO
                        return FALSE;
                }
        }
#ifdef DEBUG
        printf("TranTimeout\r\n");
#endif
        NRF_WriteReg(W_REGISTER+STATUS, IRQ_ALL);//清除状态标志
        NRF_WriteReg(FLUSH_RX, 0xff);//清接收FIFO
        NRF_WriteReg(FLUSH_TX, 0xff);//清发送FIFO
        return FALSE;
}

//接收模式
void NRF_RxMode(const u8 *addr,const  u8 channel)
{
        NRF_CE = 0;
        NRF_WriteBuf(W_REGISTER+RX_ADDR_P0, addr, MAC_LEN);//写RX节点地址
        NRF_WriteReg(W_REGISTER+RF_CH, channel);//设置RF通信频率
        NRF_WriteReg(FLUSH_RX, 0xff);//清接收FIFO
        NRF_WriteReg(W_REGISTER+CONFIG, 0x0B);//RX_DR,TX_DS,MAX_RT中断使能,CRC:8,POWER_UP,接收模式
        NRF_CE = 1;//CE为高,进入接收模式
}
回复 支持 反对

使用道具 举报

1

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-5-18
在线时间
24 小时
发表于 2021-11-17 11:30:39 | 显示全部楼层
pzg123 发表于 2016-7-27 21:48
自动应答ack,通道0地址要跟发送地址一样,发送完后,设置为接收模式时重新设置通道0地址

正解 正解 正解
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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