打印
[AVR单片机]

小弟最近调试NRF24L01发送,但不知为何TX_FIFO寄存器老是非空,还清不掉

[复制链接]
2075|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arios0409|  楼主 | 2017-3-4 13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟学NRF24L01不久,最近在调试程序时碰到这个问题卡了好久,还望大神不吝赐教。

       我发送程序按照调试方法,失能应答,失能自动重发,失能接收通道0.
如果能成功发送,那STATUS寄存器应该是0x2e也就是46,这个已经没问题了。

但是!!另一个fifo_status寄存器应该是0x11,但是我这里是0x01,意味着TX_FIFO寄存器非空。。
      于是我在发送程序里加了spi_rw_reg(flush_tx,0),分别在设置发送模式前,发送完成后都试了,加在主函数也试过了,,,,但是还是0x01,实在无奈,只好请教各位了

相关帖子

沙发
ningling_21| | 2017-3-4 14:11 | 只看该作者
因为使能了自动重发,所以发送失败时自动重发,TX仍是非空

使用特权

评论回复
板凳
arios0409|  楼主 | 2017-3-4 14:31 | 只看该作者
ningling_21 发表于 2017-3-4 14:11
因为使能了自动重发,所以发送失败时自动重发,TX仍是非空

不不不,我失能了自动重发的,RETR是0x00,所以才非常头疼

使用特权

评论回复
地板
ningling_21| | 2017-3-4 14:38 | 只看该作者
arios0409 发表于 2017-3-4 14:31
不不不,我失能了自动重发的,RETR是0x00,所以才非常头疼

STATUS 寄存器的值是多少?

使用特权

评论回复
5
arios0409|  楼主 | 2017-3-4 14:50 | 只看该作者
ningling_21 发表于 2017-3-4 14:38
STATUS 寄存器的值是多少?

46,0x2e

使用特权

评论回复
6
ningling_21| | 2017-3-4 14:55 | 只看该作者

Status=0x2E 不是发送成功了?

使用特权

评论回复
7
arios0409|  楼主 | 2017-3-4 14:58 | 只看该作者
ningling_21 发表于 2017-3-4 14:55
Status=0x2E 不是发送成功了?

是,2E应该是没问题的,但是FIFO_STATUS里的TX_FIFO应该清空不是吗,只是觉得好奇怪啊,现在在调试接收,怕因为这个问题发送有问题,到时候失败就不知道是接收问题还是发送问题了

使用特权

评论回复
8
arios0409|  楼主 | 2017-3-4 14:59 | 只看该作者
ningling_21 发表于 2017-3-4 14:55
Status=0x2E 不是发送成功了?

是不是可以不用在意这个,放心去调接收?

使用特权

评论回复
9
ningling_21| | 2017-3-4 15:02 | 只看该作者
本帖最后由 ningling_21 于 2017-3-4 15:04 编辑
arios0409 发表于 2017-3-4 14:58
是,2E应该是没问题的,但是FIFO_STATUS里的TX_FIFO应该清空不是吗,只是觉得好奇怪啊,现在在调试接收, ...

FIFO_STATUS =0x01 表示  1:RX FIFO 寄存器空

接收缓冲区是空的,可以继续接收

使用特权

评论回复
10
ningling_21| | 2017-3-4 15:05 | 只看该作者
arios0409 发表于 2017-3-4 14:59
是不是可以不用在意这个,放心去调接收?

不是,当接收缓冲区满了就不能继续接收了,发送缓冲区也一样

使用特权

评论回复
11
arios0409|  楼主 | 2017-3-4 15:14 | 只看该作者
本帖最后由 arios0409 于 2017-3-4 15:17 编辑
ningling_21 发表于 2017-3-4 15:05
不是,当接收缓冲区满了就不能继续接收了,发送缓冲区也一样

但高四位的tx_empty是0,TX_FIFO寄存器非空,但也没满,不应该发送了变成空的么?是因为我用display显示函数的时候再次装填了?

使用特权

评论回复
12
ningling_21| | 2017-3-4 15:18 | 只看该作者
arios0409 发表于 2017-3-4 15:14
但高四位的tx_empty是0,TX_FIFO寄存器非空,但也没满,不应该发送了变成空的么?是因为我用display显示函 ...

缓冲区一般不会自动清零,需程序控制
发送FIFO没满时可以继续填数据

使用特权

评论回复
13
arios0409|  楼主 | 2017-3-4 15:20 | 只看该作者
ningling_21 发表于 2017-3-4 15:18
缓冲区一般不会自动清零,需程序控制
发送FIFO没满时可以继续填数据

好,谢谢您哈,我去调试接收了

使用特权

评论回复
14
Ketose| | 2017-3-5 09:00 | 只看该作者
本帖最后由 Ketose 于 2017-3-5 09:06 编辑

在很多单片机调试通过的 NRF24L01库
https://bbs.21ic.com/icview-1673632-1-1.html

使用特权

评论回复
15
薛家骏| | 2017-3-6 22:34 | 只看该作者
缓冲区需要用程序清空,,,不是自动清空的,,如果在程序中没有清空的话,,就不能正常接收和发送了

使用特权

评论回复
16
arios0409|  楼主 | 2017-3-8 09:24 | 只看该作者
薛家骏 发表于 2017-3-6 22:34
缓冲区需要用程序清空,,,不是自动清空的,,如果在程序中没有清空的话,,就不能正常接收和发送了 ...

我用了spi_rw_reg(flush,0x00),在发送程序开头或者结尾都加了试试,但就是没啥用,所以就很尴尬了

使用特权

评论回复
17
XIAO肖| | 2017-3-8 21:43 | 只看该作者
现在基本上用24L01P了吧?

使用特权

评论回复
18
电路小哥XM| | 2017-4-16 17:34 | 只看该作者
ningling_21 发表于 2017-3-4 14:11
因为使能了自动重发,所以发送失败时自动重发,TX仍是非空

我也在调试NRF24L01,发送是可以了,就是接收每次只有上电接收一次,IRQ只能中断一次,然后就再也接收不到数据了。也不知啥原因

使用特权

评论回复
19
ningling_21| | 2017-4-16 17:43 | 只看该作者
电路小哥XM 发表于 2017-4-16 17:34
我也在调试NRF24L01,发送是可以了,就是接收每次只有上电接收一次,IRQ只能中断一次,然后就再也接收不到 ...

多检查状态寄存器,看看它的值就知道原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

1

粉丝