OpenEdv-开源电子网

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

求助 nrf24l01的发送卡死了

[复制链接]

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
发表于 2018-8-23 17:52:50 | 显示全部楼层 |阅读模式
5金钱
板子用的是stm32f407 移植的原子的无线通讯例程 调试发送程序的时候debug显示程序卡在了while(NRF24L01_IRQ!=0);这句里面 程序卡在了中断里面 但是运行例程的debug里面就没有这样的问题 我除了改了引脚 其他都是复制粘贴的 怎么还会出错 求助大神

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

使用道具 举报

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
 楼主| 发表于 2018-8-23 20:02:43 | 显示全部楼层
本帖最后由 c627933142 于 2018-8-23 23:54 编辑

我注意到个小细节 原子的板子上NRF_IRQ的引脚接了个电阻 我买的最小系统板上就没这个电阻 会不会是这个原因
回复

使用道具 举报

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
 楼主| 发表于 2018-8-23 23:52:19 | 显示全部楼层
还有个问题 既然IRQ是中断引脚 例程里怎么没有中断配置程序 求原子哥解答
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-8-24 01:39:03 | 显示全部楼层
不会是串电阻的问题。 检查其他地方吧
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-24 08:56:23 | 显示全部楼层
串电阻为了修整信号波形,避免出现振荡,自己DIY可靠性要求没有那么苛刻的话不接也可以。

楼主是只测试发送部分,但是却没有接收的板子吗?换而言之,楼主当前做的工作就是,我就让你发送,不管有没有其他器件接收?

如果是这样的话,将发送配置的函数中的“自动应答”功能关闭:
TIM截图20180824084826.png

实际上只要是使这个EN_AA寄存器的bit0=0就可以失能通道0的自动应答了:

TIM截图20180824084938.png

如果不这么做,根据数据手册中所写的,发送端在发送出去接收端的地址之后,会等待来自接收端的应答信号;如果超时,就会按照某个寄存器(记不清楚了)中设定的重试次数继续继续重试;如果所有重试次数都用光了,那么某个寄存器(也记不清了)就会 置位表示没有接收端设备的应答信号。由于发送一直都是不成功,所以IRQ也就不会有电平变化。

TIM截图20180824085400.png

不过如果不是这样的话,有对端接收,那么问题原因就比较多,例如通道不正确,频率不正确,接收端设置与发送端设置不一样(例如上面的自动应答),接收端地址和发送端给出的地址不一致等等都会导致发送失败。

此外我也不太明白为什么楼主使用调试器反而没有这种问题。


十六进制带我飞。
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-24 09:02:48 | 显示全部楼层
c627933142 发表于 2018-8-23 23:52
还有个问题 既然IRQ是中断引脚 例程里怎么没有中断配置程序 求原子哥解答

真正的工程项目中可能是会使用这个引脚作为中断功能的,但是普通学习过程中为了避免“当前数据还没有发送完成,就来了新数据”的现象,保险起见我们会让数据全部发送完成之后再退出发送数据的函数,这样操作可以使用while()反复查询也可以使用中断,但是明显直接查询更快一些。而且原子面向的是初学者,简单的查询操作比使用中断,在中断函数中设标志位,再在发送函数中检测标志位的操作要简单的多,而且后者也略显麻烦,我想因为这个原子才没有使用中断方式吧。
此外网络上流传的很多NRF24L01的例程也都没使用中断,因为这样操作可移植性非常高,代码基本上复制粘贴后修改引脚就可以运行了;但是如果有中断部分,不同类型的单片机需要考虑不同的事情,例如基本中断的配置,像是STM32还得配置中断分组,而且他们的中断函数本身也不一样,中断优先级的设置也麻烦,不适合快速移植。
类似的操作还有正点原子的串口发送部分,本来也可以直接使用中断的,应该是相似的原因对初学者友好,使用了查询的办法。
十六进制带我飞。
回复

使用道具 举报

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
 楼主| 发表于 2018-8-24 12:49:46 | 显示全部楼层
DreamWaterPro 发表于 2018-8-24 08:56
串电阻为了修整信号波形,避免出现振荡,自己DIY可靠性要求没有那么苛刻的话不接也可以。

楼主是只测试 ...

是有一个接收端的 我尝试关闭自动应答 debug还是卡在了这里
int main(void)
{                          
        u8 tmp_buf[4]={0xAA,0XAB,0XAC,0XAD};       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
        delay_init(168);  //³õʼ»¯ÑÓʱº¯Êý
        NRF24L01_Init();                    //³õʼ»¯NRF24L01        
        NRF24L01_TX_Mode();
  delay_us(10);       
  while(NRF24L01_Check()==0)
          {                                                              
                        if(NRF24L01_TxPacket(tmp_buf)==TX_OK);
                                       
                }
}       
这是我发送端的代码 if(NRF24L01_RxPacket(temp)==0)
                                Send_Remote_Data(temp,4);这个是接收端代码
接收到的数据用串口传到电脑上 原本4个字节的数组显示的满屏的FFFF 串口传输的代码是可以正常用的
回复

使用道具 举报

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
 楼主| 发表于 2018-8-24 12:51:17 | 显示全部楼层
在我的最小系统上还能检测到 在开发板上直接检测都检测不到了 我真是醉了
回复

使用道具 举报

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
 楼主| 发表于 2018-8-24 13:46:12 | 显示全部楼层
问题有进展了 接收端那边检测不到NRF。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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