一、工作模式



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通道不一样,能不能通--》结果可以。

但是在应答模式下,居然不通。自作孽啊,卧槽。浪费了好多时间,总算调通了。

最新文章

  1. NPM安装之后CMD中不能使用
  2. Android几种打开SQLite的方法
  3. [Matlab.Matrix] reshape
  4. RDD的依赖关系
  5. mybatis系列-06-输入映射
  6. IT人大学生活之“做点正经事”
  7. SQL视图和多表连接
  8. API接口服务端
  9. go 的数据类型
  10. Newtonsoft.Json(Json.net) 的使用
  11. hdu1272 小希的迷宫(并查集)
  12. lua内存监测和回收
  13. L3-020 至多删三个字符 (30 分) 线性dp
  14. TP父类及模板继承
  15. 【mysql】索引优化记录
  16. SpringMvc RequestMappingHandlerMapping
  17. mysql学习(1)
  18. Dream------Hbase--0.94版本和0.98/1.X版本api变动
  19. iOS Reachability检测网络状态
  20. C#可选参数、命名参数、参数数组

热门文章

  1. vector内存增长方式
  2. 4412 4路pwm输出
  3. [CSP-S模拟测试]:Revive(点分治)
  4. python数据分析中常用的库
  5. (转)堆和栈的概念和区别 HeapOutOfMemory和StackOverflow解释
  6. Go的struct
  7. WPF自定义控件(三)
  8. vue项目中实现手势密码
  9. python 简易计算器
  10. java 重新学习 (七)