zoukankan      html  css  js  c++  java
  • 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通道不一样,能不能通--》结果可以。
    但是在应答模式下,居然不通。自作孽啊,卧槽。浪费了好多时间,总算调通了。


    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/ch122633/p/7363253.html
Copyright © 2011-2022 走看看