NRF24L01学习

一、工作模式


PWR_UP和PRIM_RX在寄存器0x00中的第0位和第1位。
待机模式I:只是使用晶振工作,CE=0时是拉低?
待机模式II:部分时钟缓冲器处在工作模式。TX FIFO为空并且CE为高电平进入待机模式II。

然后在发送和接收时,NRF24L01有两种不同的模式,一种时ShockBurst,另一种时增强型ShockBurst,增强型多了应答。
两种模式的区别在EN_AA寄存器使能,是否开启自动应带就是区别。

自动应答(RX):收到有效的数据包后,系统进入发送模式发送确认信号。然后根据PRIM_RX和CE引脚决定
自动重发功能(ART)(TX):发送后如果没有收到确认信号,系统重发直到收到确认信号或超过重发次数。有新数据发送时丢包计数器复位。

数据通道:通过EN_RXADDR设置,默认通道0和1开启。
每个通道有自己的寄存器RX_ADDR_Px,地址通过此配置。


中断:IRQ由低电平触发,寄存器中TX_DS, RX_DS或MAX_RT为高时触发中断。所有中断都可屏蔽。

二、NRF24L01中断初始化学习

demo例程的初始化顺序:
配置CONFIG寄存器(选择需要屏蔽的中断,并开启设备PWR_UP)。
设置EN_AA寄存器(开启通道0自动应答)
设置EN_RXADDR  (开启通道0接收)
设置SETUP_AW(设置接收和发送的地址宽度)
设置SETUP_RETUP(建立重发的时间和次数)
设置RF_CH            (设置NRF24L01的工作通道频率)
设置RF_SETUP       (设置工作的参数)
设置接收RX_ADDR_P0和发送TX_ADDR地址。

小马哥的写法
设置接收模式:
①设置CONIFG为接收模式
②需要清除中断,前后都CE拉低拉高

接收函数:
①读取RD_RX_PLOAD中的FIFO数据
②清除中断

发送函数:
①装载WR_TX_PLOAD数据进FIFO
②CONFIG设置为发送模式
③清中断

错误总结:①网上说可以用串口读出寄存器的值,来确认是否配置成功。我用printf函数打印出来全是0x00。最后发现我 读取时的寄存器地址加了写地址的指令值,导致出错了。
②我初始化NRF24l01后,用EXTI_GenerateSWInterrupt(EXTI_Line11);软件触发中断。
最后停在了                 B       .       //就停在这里了,是有中断没有处理。
                ENDP
                ALIGN
所以才发现EXTI15_10_Handler写错了T.T   应该是 EXTI15_10_IRQHandler
③我发现很难调试,需要两快一起调试。这大大增加了难度。http://www.openedv.com/posts/list/0/57110.htm
④用上面这种方法实现了遥控器对飞机的发送,但是开应答一直时MAX_TX。后来发现飞机对遥控器发送失败。因为遥控器初始化后Rx_FIFO不为空,无法触发中断。
SPI_Write_Reg(FLUSH_RX,0xFF);
SPI_Write_Reg(FLUSH_TX,0xFF);
加上这两句就没有问题了。

⑤然后在不应答的情况下,能够双向收发了。但是应答情况下一直时MAX_RT,我去太郁闷了。
原来之前在不应答的情况向想看看RF_CH通道不一样,能不能通--》结果可以。
但是在应答模式下,居然不通。自作孽啊,卧槽。浪费了好多时间,总算调通了。


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(0) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

习惯就好zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值