全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > RF/无线技术 >

2.4G NRF2401的无线通讯实现

时间:2022-06-27 15:30

人气:

作者:admin

标签: mcu  无线通讯  寄存器  PCB 

导读:在应用中我们需要一对收发,也就是一个主机和一个从机。主机和从机的驱动部分是一样的(配置文件SPI_NRF.c 文件相同),区别是main函数中调用的模式不同,主机一般是发送模式NRF_T...

RF24L01+,是工作在2.4~2.5GHz 频段的,具备自动重发功能,6 个数据传输通道,最大无线传输速率为2Mbits。MCU 可与该芯片通过SPI 接口访问芯片的寄存器进行配置,达到控制模块、通过该模块实现无线通讯的目的。

具体细节参考《《野火STM32--2.4G无线传输》》

优点:不需要建立连接就可以进行收发

PCB管脚

poYBAGK5W8SAT7x6AAMSIsSPThU969.png

其中各个接口作用如下

pYYBAGK5W8qAE4Y_AACDRpsiEkQ314.png

在应用中我们需要一对收发,也就是一个主机和一个从机。主机和从机的驱动部分是一样的(配置文件SPI_NRF.c 文件相同),区别是main函数中调用的模式不同,主机一般是发送模式NRF_TX_Mode();,而从机采用的是接收模式 NRF_RX_Mode();

应用的基本流程

注意事项:

(1)首先要检查接线,一般配置的是SPI1,然后要对应程序里面的配置来接线

SPI1

SCK = PA5 MISO = PA6 MOSI = PA7

CE = PA4 CSN =PC4 IRQ = PC5

poYBAGK5W9GAayqwAACKCJjyfpY745.png

后两个是作为普通IO口,任意管脚均可

从机部分:

(1)SPI_NRF_Init(); //初始化SPI接口

(2)NRF_RX_Mode(); // 设置为接收模式

(3)while循环里等待接收,判断接收状态,并进行接收

#include “stm32f10x.h”#include “bsp_usart1.h”#include “bsp_spi_nrf.h”u8 status; //用于判断接收/发送状态u8 rxbuf[4]; //接收缓冲u8 i;

int main(void)

{

/* 串口1初始化 */

USART1_Config();

/*SPI接口初始化*/

SPI_NRF_Init();

printf(“\r\n 这是一个 NRF24L01 无线传输实验 \r\n”);

printf(“\r\n 这是无线传输 从机端 的反馈信息\r\n”);

printf(“\r\n 正在检测NRF与MCU是否正常连接。。。\r\n”); /*检测NRF模块与MCU的连接*/

status = NRF_Check();

if(status == SUCCESS)

printf(“\r\n NRF与MCU连接成功\r\n”);

else

printf(“\r\n 正在检测NRF与MCU是否正常连接。。。\r\n”);

NRF_RX_Mode(); // 设置为接收模式

printf(“\r\n 从机端 进入接收模式\r\n”); while(1)

{

/*等待接收数据*/

status = NRF_Rx_Dat(rxbuf); /*判断接收状态*/

switch(status)

{ case RX_DR: for(i=0;i《4;i++)

{

printf(“\r\n 从机端 接收到 主机端 发送的数据为:%d \r\n”,rxbuf[i]);

}break;

case ERROR:

printf(“\r\n 从机端 接收出错。 \r\n”);break;

}

}

}

主机部分:

(1)SPI_NRF_Init(); //初始化SPI接口

(2)NRF_TX_Mode(); // 设置为发送模式

(3)发送数据,查看发送状态,否则重发。比如用按键中断来进行一次发送

注:一般都会显示超时,但是实际接收端有接收到。

初始化和配置与从机相同,除了TX模式

发送部分的代码:

void EXTI0_IRQHandler(void)

{ int i=0; if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 确保是否产生了EXTI Line中断!! { for(i=0;i《4;i++)

txbuf[i]+=1;

printf(“\r\n exit \r\n”);

status = NRF_Tx_Dat(txbuf);

switch(status)

{ case MAX_RT:

printf(“\r\n 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 \r\n”); break; case ERROR:

printf(“\r\n 未知原因导致发送失败。 \r\n”); break; case TX_DS:

printf(“\r\n 主机端 接收到 从机端 的应答信号,发送成功! \r\n”);

break;

}

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信