nrf2401(2.4G无线模块NRF2401[亲测有效])

发布时间:2025-12-10 19:15:47 浏览次数:9

2.4G无线模块NRF2401[亲测有效]-nrf2401模块

2.4G无线模块NRF2401[亲测有效]RF24L01+,是工作在2.4~2.5GHz频段的,具备自动重发功能,6个数据传输通道,最大无线传输速率为2Mbits。MCU可与该芯片通过SPI接口访问芯片的寄存器进行配置,达到控制模块、通过该模块实现无线通讯的目的。具体细节参考<<野火STM322.4G无线传输&gt

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

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

PCB管脚

其中各个接口作用如下

在应用中我们需要一对收发,也就是一个主机和一个从机。主机和从机的驱动部分是一样的(配置文件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

后两个是作为普通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;              }   } }

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

主机部分:

(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;                                      }
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477