OpenEdv-开源电子网

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

【求助】nrf24l01无线通信无法实现

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-4-21
在线时间
2 小时
发表于 2018-4-21 22:13:33 | 显示全部楼层 |阅读模式
5金钱
使用的2块相同的战舰V3开发板。已拔掉st-link运行程序。
程序也是从最新的战舰V3hal库版本中直接用的。
但接收端一直是send failed


主函数
int main(void)
{       
        u8 key,mode;
        u16 t=0;                         
        u8 tmp_buf[33];       
       
    HAL_Init();                                     //3õê¼»ˉHAL¿a   
    Stm32_Clock_Init(RCC_PLL_MUL9);           //éèÖÃê±Öó,72M
        delay_init(72);                               //3õê¼»ˉÑóê±oˉêy
        uart_init(115200);                                        //3õê¼»ˉ′®¿ú       
        LED_Init();                                                        //3õê¼»ˉLED       
        KEY_Init();                                                        //3õê¼»ˉ°′¼ü
        LCD_Init();                                           //3õê¼»ˉLCD FSMC½ó¿ú
        NRF24L01_Init();                                //3õê¼»ˉNRF24L01
       
           POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"WarShip STM32");       
        LCD_ShowString(30,70,200,16,16,"NRF24L01 TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2017/6/1");                        
        while(NRF24L01_Check())
        {
                LCD_ShowString(30,130,200,16,16,"NRF24L01 Error");
                delay_ms(200);
                LCD_Fill(30,130,239,130+16,WHITE);
                delay_ms(200);
        }
        LCD_ShowString(30,130,200,16,16,"NRF24L01 OK");          
        while(1)
        {       
                key=KEY_Scan(0);
                if(key==KEY0_PRES)
                {
                        mode=0;   
                        break;
                }else if(key==KEY1_PRES)
                {
                        mode=1;
                        break;
                }
                t++;
                if(t==100)LCD_ShowString(10,150,230,16,16,"KEY0:RX_Mode  KEY1:TX_Mode"); //éá˸ÏÔê¾ìáê¾DÅÏ¢
                if(t==200)
                {       
                        LCD_Fill(10,150,230,150+16,WHITE);
                        t=0;
                }
                delay_ms(5);          
        }   
        LCD_Fill(10,150,240,166,WHITE);//Çå¿ÕéÏÃæμÄÏÔê¾                  
        POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«          
        if(mode==0)//RXÄ£ê½
        {
                LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode");       
                LCD_ShowString(30,170,200,16,16,"Received DATA:");       
                NRF24L01_RX_Mode();                  
                while(1)
                {                                                                                   
                        if(NRF24L01_RxPacket(tmp_buf)==0)//ò»μ©½óêÕμ½DÅÏ¢,ÔòÏÔê¾3öà′.
                        {
                                tmp_buf[32]=0;//¼óèë×Ö·û′®½áêø·û
                                LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);   
                        }else delay_us(100);          
                        t++;
                        if(t==10000)//′óÔ¼1sÖó¸Ä±äò»′Î×′ì¬
                        {
                                t=0;
                                LED0=!LED0;
                        }                                     
                };       
        }else//TXÄ£ê½
        {                                                            
                LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode");       
                NRF24L01_TX_Mode();
                mode=' ';//′ó¿Õ¸ñ¼ü¿aê¼  
                while(1)
                {                                                              
                        if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
                        {
                                LCD_ShowString(30,170,239,32,16,"Sended DATA:");       
                                LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);
                                key=mode;
                                for(t=0;t<32;t++)
                                {
                                        key++;
                                        if(key>('~'))key=' ';
                                        tmp_buf[t]=key;       
                                }
                                mode++;
                                if(mode>'~')mode=' ';            
                                tmp_buf[32]=0;//&#188;óè&#235;&#189;áê&#248;·&#251;                  
                        }else
                        {                                                                                          
                                LCD_Fill(0,170,lcddev.width,170+16*3,WHITE);//&#199;&#229;&#191;&#213;&#207;&#212;ê&#190;                          
                                LCD_ShowString(30,170,lcddev.width-1,32,16,"Send Failed ");
                        };
                        LED0=!LED0;
                        delay_ms(1500);                                    
                };
        }
}
发送数据函数

u8 NRF24L01_TxPacket(u8 *txbuf)
{
        u8 sta;
        SPI2_SetSpeed(SPI_BAUDRATEPRESCALER_8); //spi&#203;ù&#182;è&#206;a6.75Mhz£¨24L01μ&#196;×&#238;′óSPIê±&#214;ó&#206;a10Mhz£&#169;   
        NRF24L01_CE=0;
          NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//D′êy&#190;Yμ&#189;TX BUF  32&#184;&#246;×&#214;&#189;ú
        NRF24L01_CE=1;                         //&#198;&#244;&#182;ˉ·¢&#203;í          
        while(NRF24L01_IRQ!=0);                 //μè′y·¢&#203;ííê3é
        sta=NRF24L01_Read_Reg(STATUS);          //&#182;áè&#161;×′ì&#172;&#188;&#196;′&#230;&#198;÷μ&#196;&#214;μ          
        NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //&#199;&#229;3yTX_DS&#187;òMAX_RT&#214;D&#182;&#207;±ê&#214;&#190;
        if(sta&MAX_TX)                          //′&#239;μ&#189;×&#238;′ó&#214;&#216;·¢′&#206;êy
        {
                NRF24L01_Write_Reg(FLUSH_TX,0xff);  //&#199;&#229;3yTX FIFO&#188;&#196;′&#230;&#198;÷
                return MAX_TX;
        }
        if(sta&TX_OK)                           //·¢&#203;ííê3é
        {
                return TX_OK;
        }
        return 0xff;//&#198;&#228;&#203;&#251;&#212;-òò·¢&#203;í꧰ü

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-4-21
在线时间
2 小时
 楼主| 发表于 2018-4-21 22:19:31 | 显示全部楼层
求大佬帮助啊,网上好多错误原因看了,改了都没用啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-4-22 01:47:03 | 显示全部楼层
是一个发送,一个接收么?  试试寄存器版本。
回复

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
发表于 2018-4-22 09:52:15 | 显示全部楼层
huangdiqiao 发表于 2018-4-21 22:19
求大佬帮助啊,网上好多错误原因看了,改了都没用啊

按照原子哥的说明做吧,寄存器版本的代码是最好的,其他的代码有问题
知识是你最好的财富
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 03:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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