| 
 
新手上路 
 
	积分41金钱41 注册时间2015-11-13在线时间0 小时 | 
 
5金钱 
| 打算一块探索者STM32F4+2块NRF24L01自发自收,应该是可以实现的吧?只将PG10(FSMC_NE3)拉高了(关掉了SRAM),不知道还有没有其他冲突。现在两个NRF都可以Check(两个Check当然是分开的了)通过,发送端的NRF可以发,但是接收端的NRF就是收不到。<br /> <br />
 先说一下现在的情况:<br />
 硬件:<br />
 ①一块探索者STM32F4<br />
 ②两块NRF24L01模块(找别人试过可以收发)<br />
 <br />
 连接:<br />
 ①一块NRF(后称TX_NRF)插开发板的专用接口,作发送<br />
 ②一块NRF(后称RX_NRF)作接收,用杜邦线将模块与IO口连接起来,连接如下:<br />
 1.PG3作IRQ,PG5作CSN,PG7作CE<br />
 2.使用PC10~12复用为SPI3<br />
 <br />
 查了开发板的专用接口的原理图和PCB板图,知道了NRF模块每个脚的功能,所以<span>RX_NRF的连接如下:<br />
 
    </span><br /> 
    <br /> 
    <br /> 软件:<br />
 ①复制原子大哥的24l01.c为RX_NRF24L01.c。里面的RX_NRF24L01_Init负责初始化RX_NRF。<br />
 ②<span>24l01.c的<span>NRF24L01_Init改名为TX_<span>NRF24L01_Init</span></span>。另外还取消了SPI1_Init函数,直接<span>在</span><span>_NRF24L01_Init</span>里一次过初始化完。<br />
 ③所有IO的速度都调低为25MHz,SPI预分频值设置为SPI_BaudRatePrescaler_8<br />
 ④在spi.h和spi.c里增加SPI3_ReadWriteByte函数的声明和定义<br />
 ⑤main.c去掉了led.h和key.h的使用,并删除了<span>全部</span>led和key的应用代码<br />
 <br />
 main函数(部分,所有省略号的注释都是省略了代码):<br />
 </span><span>
 <div   style="background-color:#E8E8E8;">
 [mw_shl_code=c,true]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;
         }
       }
     }
   }
 }[/mw_shl_code]
 </div>
 完整的代码在附件,要重新生成哦(为了减少体积把OBJ里面的都删了)<br />
 原子大神,拜托了,能看看吗?有空的话还可以自己拿两个模块搭来试试,看看我的代码到底为什么收不到呢?</span>
 | 
 |