十分钟nRF24L01完成数据传输代码编写--NRF24L01由入门到精通01

目录

一、分类简介

1、什么是nRF24L01

2、什么是TTL串口模块转接板

3、什么是USB无线串口模块

二、连接方式

三、配置方法

1、USB无线串口 默认配置

2、TTL串口模块转接板默认配置

3、更改配置

4、参数储存位置

四、一台电脑对单片机串口双向通信

1、配置方式

五、两台电脑一对一双向通信

1、配置方式

六、 一台电脑对多台电脑双向通信(可以匹配无限多个)

1、方式一(编程控制)

1、前提:

2、编程理论

2、方式二(配置地址)

1、前提:

七、编程


一、分类简介

1、什么是nRF24L01

2、什么是TTL串口模块转接板

 

3、什么是USB无线串口模块

二、连接方式

、配置方法

1、USB无线串口 默认配置

连接方式:将下图所示的一套插到电脑上,红灯表示通电,蓝灯闪耀表示usb模块正常。

输入AT? 查看信息。

 

2、TTL串口模块转接板默认配置

1、查看/设置TTL串口+nRF2401无线模块比较麻烦,需要添加一个USB转TTL模块,才可以查看设置。

2、TTL串口+nRF2401无线模块和USB转TTL模块相连接的时候注意,他们的TXD和RXD是交叉连接的。

3、更改配置

1、根据 无线串口产品升级版V2.0.pdf 或者 TTL转nRF24L01+使用说明.pdf 文件里面的配制方法配置参数。

4、参数储存位置

1、配置好的参数是储存在与nRF2401无线模块 相连接的USB无线串口或者TTL串口模块上面的。

2、nRF2401无线模块的参数是掉电参数恢复默认值。

四、一台电脑对单片机串口双向通信

1、配置方式

1、电脑端直接配置,单片机端需要USB转TTL模块连接配置。

2、参数除了地址是对调的,其余参数一致。

五、两台电脑一对一双向通信

1、配置方式

  1. 两个都直接插到电脑上。
  2. 参数除了地址是对调的,其余参数一致。

3、实测波特率两者可以不相同,但是通讯频率和空中速率必须相同。地址必须对换相同。

六、 一台电脑对多台电脑双向通信(可以匹配无限多个)

1、方式一(编程控制)

1前提:

一个端口A对应多个端口B1、B2、B3·····

2编程理论

编程控制,发送的32个字节(最多32个,发送字节数可以更改),第一个字节是发送的字节数,第二个字节是B1~2~3~4·····的地址编号,进行判断是否是发给我的信息。

2、方式二(配置地址)

1前提:

nRF24L01频率在2.4G到2.525GHz之间都可以设置,选择不同的通道进行设置配置。

七、编程

上述采用的实际上就是将nRF24L01转换成串口来进行输入输出,不用看数据手册,直接配置好当做串口来用,简单粗暴!!

 

  • 10
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
可以按照以下步骤实现STM32F103利用rt-thread外部中断接收nrf24l01的数据: 1. 首先,需要配置nrf24l01的SPI接口,并初始化nrf24l01的寄存器。 2. 配置外部中断,使其对应nrf24l01的IRQ引脚。在中断服务函数中,读取nrf24l01的状态寄存器,判断是否有数据接收完成。 3. 如果有数据接收完成,从nrf24l01的接收缓冲区中读取数据,并将数据传递给rt-thread的消息队列。 4. 在rt-thread的线程中,从消息队列中读取数据,并进行处理。 以下是一个简单的示例代码: ``` #include "rtthread.h" #include "drv_spi.h" #include "drv_nrf24l01.h" #define NRF24L01_IRQ_PIN GPIO_PIN_0 #define NRF24L01_IRQ_PORT GPIOA static rt_mq_t nrf24l01_mq; void nrf24l01_irq_handler(void) { if (nrf24l01_rx_data_ready()) { uint8_t data[32]; nrf24l01_read_rx_payload(data, sizeof(data)); rt_mq_send(&nrf24l01_mq, data, sizeof(data)); } } void nrf24l01_thread_entry(void* parameter) { rt_uint8_t data[32]; while (1) { rt_err_t result = rt_mq_recv(&nrf24l01_mq, data, sizeof(data), RT_WAITING_FOREVER); if (result == RT_EOK) { // 处理接收到的数据 } } } static void nrf24l01_init(void) { // 配置SPI接口 spi_init(); // 初始化nrf24l01寄存器 nrf24l01_init(); // 配置外部中断 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = NRF24L01_IRQ_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(NRF24L01_IRQ_PORT, &GPIO_InitStruct); // 配置中断服务函数 HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 创建消息队列 rt_mq_init(&nrf24l01_mq, "nrf24l01_mq", data, sizeof(data), 32, RT_IPC_FLAG_FIFO); } int rt_application_init(void) { // 创建nrf24l01线程 rt_thread_t nrf24l01_thread = rt_thread_create("nrf24l01", nrf24l01_thread_entry, RT_NULL, 1024, 25, 10); if (nrf24l01_thread != RT_NULL) { rt_thread_startup(nrf24l01_thread); } // 初始化nrf24l01 nrf24l01_init(); return 0; } ``` 在上面的代码中,nrf24l01_irq_handler()函数是中断服务函数,会在nrf24l01的IRQ引脚触发外部中断时被调用。在该函数中,读取nrf24l01的状态寄存器,判断是否有数据接收完成,如果有,则从nrf24l01的接收缓冲区中读取数据,并将数据传递给rt-thread的消息队列。 nrf24l01_thread_entry()函数是rt-thread的线程函数,会从消息队列中读取数据,并进行处理。在该函数中,调用rt_mq_recv()函数从消息队列中读取数据。如果读取成功,则可以对接收到的数据进行处理。 在rt_application_init()函数中,创建nrf24l01线程,并初始化nrf24l01。在初始化nrf24l01时,会配置nrf24l01的SPI接口,并初始化nrf24l01的寄存器。同时,会配置外部中断,使其对应nrf24l01的IRQ引脚。创建消息队列时,需要指定消息队列的名称、消息缓冲区、消息长度和消息数量等参数。 如果需要发送数据,可以调用nrf24l01_write_tx_payload()函数将数据写入nrf24l01的发送缓冲区,然后调用nrf24l01_transmit()函数启动发送过程。发送完成后,会触发中断,可以在中断服务函数中处理发送完成的事件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值