天线|RF射频
直播中

李雪飞

7年用户 173经验值
私信 关注
[问答]

探索者STM32F4和2块NRF24L01自发自收就是收不到?

打算一块探索者STM32F4+2块NRF24L01自发自收,应该是可以实现的吧?只将PG10(FSMC_NE3)拉高了(关掉了SRAM),不知道还有没有其他冲突。现在两个NRF都可以Check(两个Check当然是分开的了)通过,发送端的NRF可以发,但是接收端的NRF就是收不到。



先说一下现在的情况:

硬件:

①一块探索者STM32F4

②两块NRF24L01模块(找别人试过可以收发)



连接:

①一块NRF(后称TX_NRF)插开发板的专用接口,作发送

②一块NRF(后称RX_NRF)作接收,用杜邦线将模块与IO口连接起来,连接如下:

1.PG3作IRQ,PG5作CSN,PG7作CE

2.使用PC10~12复用为SPI3



查了开发板的专用接口的原理图和PCB板图,知道了NRF模块每个脚的功能,所以RX_NRF的连接如下:







软件:

①复制原子大哥的24l01.c为RX_NRF24L01.c。里面的RX_NRF24L01_Init负责初始化RX_NRF。

24l01.c的NRF24L01_Init改名为TX_NRF24L01_Init。另外还取消了SPI1_Init函数,直接_NRF24L01_Init里一次过初始化完。

③所有IO的速度都调低为25MHz,SPI预分频值设置为SPI_BaudRatePrescaler_8

④在spi.h和spi.c里增加SPI3_ReadWriteByte函数的声明和定义

⑤main.c去掉了led.h和key.h的使用,并删除了全部led和key的应用代码



main函数(部分,所有省略号的注释都是省略了代码):



[C] 纯文本查看 复制代码
int main(void){ // ……这部分代码先省略了TX_NRF24L01_Init();   //初始化NRF24L01 RX_NRF24L01_Init();   //初始化NRF24L01  POINT_COLOR=RED;//设置字体为红色 while(TX_NRF24L01_Check()){// ……这部分代码先省略了} delay_ms(400);while(RX_NRF24L01_Check()){// ……这部分代码先省略了}// 初始化mode=0,进入发送模式mode = 0;// 生成要发送的字符串// ……这部分代码先省略了// 发送端初始化为发送状态TX_NRF24L01_TX_Mode();// 接收端初始化为接收状态RX_NRF24L01_RX_Mode();  while(1)  {      if(mode==0)//TX模式    {      // ...      while(1)      {          if(TX_NRF24L01_TxPacket(tmp_buf)==TX_OK)        {          //……          mode = 1;// 发送成功改变模式          break;         }else        {            LCD_Fill(0,110,lcddev.width,170+16*3,WHITE);//清空显示            LCD_ShowString(30,110,lcddev.width-1,32,16,"Send Failed");         };        delay_ms(500);      }     }    else//RX模式    {       LCD_ShowString(30,170,200,16,16,"RX_Mode");       while(1)      {          if(RX_NRF24L01_RxPacket(tmp_buf)==0) //一旦接收到信息,则显示出来.        {            //……            //mode = 0;// 读取成功就改变模式            break;        }else        {            //……            mode = 0;// 读取失败就改变模式            break;        }       }     }  }}

完整的代码在附件,要重新生成哦(为了减少体积把OBJ里面的都删了)

原子大神,拜托了,能看看吗?有空的话还可以自己拿两个模块搭来试试,看看我的代码到底为什么收不到呢?
自发自收无线通信.rar (497.72 KB )

回帖(12)

刘占宽

2020-4-21 08:08:11
单独测试,ok么?
举报

张琼

2020-4-21 08:22:08

怎么叫单独测试呢?单独收是没办法测试的了,单独发送STATUS是有发送成功标志位了
举报

卢家辉

2020-4-21 08:31:29
在第三张图可以看到代码的显示,发送应该是成功的,只是接收就是失败了。



软件补充一点:⑥收发都关闭了自动应答
举报

刘晓英

2020-4-21 08:44:33
发现一个问题,RX_NRF的CE使用了PG7,与TX_NRF的CSN重复了,改成PG1。但是还是一样的失败
举报

更多回帖

相关问答

STM32 nRF24L01
发帖
登录/注册
×
20
完善资料,
赚取积分