2.4G无线模块NRF2401

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口,任意管脚均可

从机部分:

3.在家用电器中的应用??可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。

(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;                                  
    }

来源:http://www.cnblogs.com/Kevin127/p/5293869.html  

因此本课程适合所有51单片机应用开发人员,电子爱好者、大中院校相关专业学生、工程技术人员的学习课程,也可作为短期培训课程,是单片机爱好者从入门到深入的经典课程。

生成海报
点赞 0

thePro

我还没有学会写个人说明!

相关推荐