OpenEdv-开源电子网

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

求助NRF24L01的问题,具体问题如下:

[复制链接]

3

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-9-20
在线时间
2 小时
发表于 2016-3-5 23:13:51 | 显示全部楼层 |阅读模式
这是我写的主函数,除了nrf24l01.h改动了传输数据长度,改成了2个字节传输,其他没变。主要思路是ADC采集到12位数据,将12位数据存到一个u8数组中,数组长度为2,然后NRF发送数组的数据出去,用于其他用途。
#include "stm32f10x.h"
#include "24l01.h"
#include "spi.h"
#include "adc.h"
#include "delay.h"
#include "usart.h"


int main(void)
{       
       
    u16 adcx1;
        u8 temp_buf1[2];
         SystemInit ();
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
        //u8 temp_buf2[2];
    delay_init();                     //延时函数初始化       
       
    uart_init(9600);                 //串口初始化为9600

        Adc_Init();                                  //ADC初始化       
        printf("ADC初始化完成\r\n");
        NRF24L01_Init();            //初始化NRF24L01
        while(NRF24L01_Check());
         printf("NRF初始化完成\r\n");
        NRF24L01_TX_Mode();
          printf("发送模式\r\n");
        while(1)
         {
                 
             adcx1=Get_Adc_Average(ADC_Channel_0,10);
                printf("adc数据\r\n");
                 temp_buf1[0]=(adcx1>>8);
                 temp_buf1[1]=(adcx1&0x00ff);
                 while(NRF24L01_TxPacket(temp_buf1)!=TX_OK);
                 printf("fasong完成\r\n");
                 

         }
         
}



但是程序一直陷入在




u8 NRF24L01_TxPacket(u8 *txbuf)
{
        u8 sta;
        SPI1_SetSpeed(SPI_BaudRatePrescaler_8);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)   
        NRF24L01_CE=0;
          NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF  32个字节
        NRF24L01_CE=1;//启动发送          
        while(NRF24L01_IRQ!=0);//等待发送完成
        sta=NRF24L01_Read_Reg(STATUS);  //读取状态寄存器的值          
        NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
        if(sta&MAX_TX)//达到最大重发次数
        {
                NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
                return MAX_TX;
        }
        if(sta&TX_OK)//发送完成
        {
                return TX_OK;
        }
        return 0xff;//其他原因发送失败
}

里面的while(NRF24L01_IRQ!=0)语句中死循环,这是什么原因。NRF初始化和adc数据采集都成功了,数据就是发不出去

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

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1571
金钱
1571
注册时间
2015-8-9
在线时间
624 小时
发表于 2016-3-6 09:44:17 | 显示全部楼层
本帖最后由 Akatsuki_lim 于 2016-3-6 09:47 编辑

while(NRF24L01_IRQ!=0)是跟NRF24L01内部的Enhanced Short Burst协议有关,原子的资料里有有个《NRF24L01功能使用文档》,里面的第五点有说到。
具体的波形可以自己看看文档的波形图,也可以自己用示波器测一下。
针对楼主的情况,可以换一个模块来试一下,说不定是模块坏了
捕获1.JPG
回复 支持 反对

使用道具 举报

3

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-9-20
在线时间
2 小时
 楼主| 发表于 2016-3-7 20:54:51 | 显示全部楼层
Akatsuki_lim 发表于 2016-3-6 09:44
while(NRF24L01_IRQ!=0)是跟NRF24L01内部的Enhanced Short Burst协议有关,原子的资料里有有个《NRF24L01功 ...

我来试试呢,谢谢了
回复 支持 反对

使用道具 举报

5

主题

110

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2013-9-16
在线时间
0 小时
发表于 2016-5-6 13:11:33 | 显示全部楼层
可以看看
NRF24L01无线数传软件解析http://v.youku.com/v_show/id_XMTU0NzM3ODIxNg==.html
RFinchina 团队欢迎无线方面的技术交流 QQ 474882985
回复 支持 反对

使用道具 举报

11

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2016-1-21
在线时间
35 小时
发表于 2016-5-17 14:26:08 | 显示全部楼层
@zeng JIN ,楼主解决了没?
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2020-10-14
在线时间
20 小时
发表于 2020-11-25 10:14:04 | 显示全部楼层
66666666666666666666666666
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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