背景介绍:
RT-Thread 的 nRF24L01 组件当前最近的更新发生在 2020-02-04。
Sugar 本篇从使用者的角度说一下最新组件的用法和测试结果。
使用方法
想了解一个 github 上的开源项目,首先就要去看项目的 ReadMe.md
nRF24L01 的开源地址是https://github.com/sogwms/nrf24l01.git
,在开源项目上有提到:
点击 user_guide.md 看到这么一段代码:
如果读者是个玩儿代码的老手,并且对 RT-Thread 比较熟悉,那么看到这里就已经能会用了。当然,为了让新手也能顺利使用,下面 Sugar 还会继续啰嗦啰嗦。
使用方法看 demo。demo 的截图这里就不放了,直接说 Sugar 从 demo 上学到的用法(直接讲代码)。
Sugar 在 RT-Thread 社区上看到这么个问题:
对于引脚配置,Sugar 没有使用 env 直接改了代码(上面图中说了怎么改)。如果不知道引脚编号,在代码里直接用 rtt 的 GET_PIN()
就行了。
上面说了 CE 和 IRQ 的引脚,片选 CS 的引脚在代码里这样写的:
rtconfig.h 开启必要的宏
对于 demo,这样下来发送角色ROLE_PTX
的全部配置就完成了。设计者其实已经做到了极简配置(只留了 5 个宏定义,都在上面的图片里)。
发送失败怎么回事
如果读者在跟着做,到这里会得到这样的结果:
上图来自 RT-Thread 社区,如果读者遇到了这个现象,那么恭喜读者,按照 Sugar 的实测,这样离成功就不远了。下面先来解释一下为什么发送失败,其实这个答案开源作者已经说了,但需要再深一步解释才能让初学者也看懂,如下:
加入自己的通信数据
关于 RT-Thread 使用 nRF24L01 组件加入自定义通信数据,Sugar 曾经写过两篇推文:
1、《为了解决 RT-Thread nRF24L01 软件包在 STM32F103C8 上死活调不通的问题,我都干了啥?》
新的 nRF24L01 组件包(v2.0.0)与上一版(v1.0.0)不同的是:作者把收和发分别放在了两个不同的回调函数里。这与 Sugar 用过的 CubeMX 裸机版驱动的设计一致,关于 CubeMX 裸机驱动 Sugar 写过一篇推文:
nRF24L01 的新组件下把接收放在 rx_ind()
下,把发送放在 tx_done()
下就行了,以 ROLE_PTX 为例,Sugar 给出下面完整代码:
#include <nrf24l01.h>
#include <rtconfig.h>
#include <entry.h>
#include <rtt_interface.h>
#include <mavlink.h>
#include <stm32f4xx_hal.h>
#define NRF24_DEMO_ROLE ROLE_PTX
#define NRF24_DEMO_SEND_INTERVAL 10
#define NRF24_DEMO_SPI_DEV_NAME "spi10"
#define NRF24_DEMO_CE_PIN GET_PIN(B, 6)
#define NRF24_DEMO_IRQ_PIN GET_PIN(B, 8)
static uint32_t last_timestamp;
static uint32_t timestamp;
extern UART_HandleTypeDef huart1;
ap_t mav_data;
vel_target vel={
.vel_x = 0.0f,