找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4472|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

無線收發(fā)器 itead arduino 2.4G無線模塊 RF數(shù)傳通信模塊配套資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
   NRF24L01是一款工作在2.4-2.5GHz世界通用ISM頻段的單片收發(fā)芯片,無線收發(fā)器包括:頻率發(fā)生器 增強(qiáng)型 SchockBurstTM 模式控制器 功率放大器 晶體放大器 調(diào)制器 解調(diào)器 輸出功率頻道選擇和協(xié)議的設(shè)置可以通過SPI接口進(jìn)行設(shè)置極低的電流消耗,當(dāng)工作在發(fā)射模式下發(fā)射功率為6dBm時(shí)電流消耗為9.0mA 接受模式為12.3mA掉電模式和待機(jī)模式下電流消耗模式更低。

球開放ISM 頻段,最大0dBm 發(fā)射功率,免許可證使用?諘100米!支持六路通道的數(shù)據(jù)接收

特性如下:

1.低工作電壓:1.9~3.6V低電壓工作

2.高速率:2Mbps,由于空中傳輸時(shí)間很短,極大的降低了無線傳輸中的碰撞現(xiàn)象(軟件設(shè)置1Mbps或者2Mbps的空中傳輸速率)

3.多頻點(diǎn):125 頻點(diǎn),滿足多點(diǎn)通信和跳頻通信需要

4.超小型:內(nèi)置2.4GHz天線,體積小巧,15x29mm(包括天線)

5.低功耗:當(dāng)工作在應(yīng)答模式通信時(shí),快速的空中傳輸及啟動(dòng)時(shí)間,極大的降低了電流消耗。

6.低應(yīng)用成本:NRF24L01集成了所有與RF協(xié)議相關(guān)的高速信號(hào)處理部分,比如:自動(dòng)重發(fā)丟失數(shù)據(jù)包和自動(dòng)產(chǎn)生應(yīng)答信號(hào)等,NRF24L01的SPI接口可以利用單片機(jī)的硬件SPI口連接或用單片機(jī)I/O口進(jìn)行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便于使用低成本單片機(jī)。

7.便于開發(fā):由于鏈路層完全集成在模塊上,非常便于開發(fā)。自動(dòng)重發(fā)功能,自動(dòng)檢測(cè)和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時(shí)間及重發(fā)次數(shù)可軟件控制自動(dòng)存儲(chǔ)未收到應(yīng)答信號(hào)的數(shù)據(jù)包自動(dòng)應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動(dòng)發(fā)送應(yīng)答信號(hào),無須另行編程載波檢測(cè)—固定頻率檢測(cè)內(nèi)置硬件CRC 檢錯(cuò)和點(diǎn)對(duì)多點(diǎn)通信地址控制數(shù)據(jù)包傳輸錯(cuò)誤計(jì)數(shù)器及載波檢測(cè)功能可用于跳頻設(shè)置可同時(shí)設(shè)置六路接收通道地址,可有選擇性的打開接收通道標(biāo)準(zhǔn)插針Dip2.54MM間距接口,便于嵌入式應(yīng)用







原代碼:
  1. /****************************************/
  2. /*        nRF24L01_SPI通信程序
  3.      連線方式:
  4.              IOB0---》CE      (7腳)
  5.              IOB1---》CSN     (6腳)
  6.              IOB2---》SCK     (5腳)
  7.              IOB3---》MOSI    (4腳)
  8.              IOB4---》MISO    (3腳)
  9.              IOB5---》IRQ     (2腳)
  10. */
  11. /****************************************/
  12. #include "SPCE061V004.H"
  13. //#include "LCD.h"


  14. #define MISO     *P_IOB_Data
  15. #define uchar      unsigned char
  16. #define MOSI_High *P_IOB_Data|=0x0008
  17. #define MOSI_Low  *P_IOB_Data&=0xfff7
  18. #define SCK_High  *P_IOB_Data|=0x0004
  19. #define SCK_Low   *P_IOB_Data&=0xfffb
  20. #define CE_High   *P_IOB_Data|=0x0001
  21. #define CE_Low    *P_IOB_Data&=0xfffe
  22. #define CSN_High  *P_IOB_Data|=0x0002
  23. #define CSN_Low   *P_IOB_Data&=0xfffd

  24. #define TX_ADR_WIDTH    5                   // 5 bytes TX(RX) address width
  25. #define TX_PLOAD_WIDTH  20                  // 20 bytes TX payload
  26. #define        RX_DS      sta&0x40       // RX_DR=sta^6;
  27. #define TX_DS      sta&0x20       //        TX_DS        =sta^5;
  28. #define MAX_RT     sta&0x10      //        MAX_RT        =sta^4;
  29. // SPI(nRF24L01) commands
  30. #define READ_REG    0x00                                                 // Define read command to register
  31. #define WRITE_REG   0x20                                                 // Define write command to register
  32. #define RD_RX_PLOAD 0x61                                         // Define RX payload register address
  33. #define WR_TX_PLOAD 0xA0                                         // Define TX payload register address
  34. #define FLUSH_TX    0xE1                                                 // Define flush TX register command
  35. #define FLUSH_RX    0xE2                                                 // Define flush RX register command
  36. #define REUSE_TX_PL 0xE3                                         // Define reuse TX payload register command
  37. #define NOP         0xFF                                                         // Define No Operation, might be used to read status register
  38. //***************************************************//
  39. // SPI(nRF24L01) registers(addresses)
  40. #define CONFIG      0x00                                                 // 'Config' register address
  41. #define EN_AA       0x01                      // 'Enable Auto Acknowledgment' register address
  42. #define EN_RXADDR   0x02                  // 'Enabled RX addresses' register address
  43. #define SETUP_AW    0x03                     // 'Setup address width' register address
  44. #define SETUP_RETR  0x04                  // 'Setup Auto. Retrans' register address
  45. #define RF_CH       0x05                       // 'RF channel' register address
  46. #define RF_SETUP    0x06                                         // 'RF setup' register address
  47. #define STATUS      0x07                                         // 'Status' register address
  48. #define OBSERVE_TX  0x08                                 // 'Observe TX' register address
  49. #define CD          0x09                                                 //'Carrier Detect' register address
  50. #define RX_ADDR_P0  0x0A                                         // 'RX address pipe0' register address
  51. #define RX_ADDR_P1  0x0B                                 // 'RX address pipe1' register address
  52. #define RX_ADDR_P2  0x0C                                 // 'RX address pipe2' register address
  53. #define RX_ADDR_P3  0x0D                                 // 'RX address pipe3' register address
  54. #define RX_ADDR_P4  0x0E                                 // 'RX address pipe4' register address
  55. #define RX_ADDR_P5  0x0F                                    // 'RX address pipe5' register address
  56. #define TX_ADDR     0x10                                         // 'TX address' register address
  57. #define RX_PW_P0    0x11                                         // 'RX payload width, pipe0' register address
  58. #define RX_PW_P1    0x12                                         // 'RX payload width, pipe1' register address
  59. #define RX_PW_P2    0x13                                         // 'RX payload width, pipe2' register address
  60. #define RX_PW_P3    0x14                                         // 'RX payload width, pipe3' register address
  61. #define RX_PW_P4    0x15                                         // 'RX payload width, pipe4' register address
  62. #define RX_PW_P5    0x16                                         // 'RX payload width, pipe5' register address
  63. #define FIFO_STATUS 0x17                                     // 'FIFO Status Register' register address

  64. unsigned char Buffer[5]={"0","3","4","5","8"};
  65. unsigned char const TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};  // Define a static TX address
  66. unsigned char  SPI_ReceiveData;
  67. unsigned char RX[16];
  68. unsigned char Tx_Buffer[5]={"abc"};
  69. void Initial_IOB()  //初始化IOB端口
  70. {
  71.    *P_IOB_Dir=0xffcf;    //set IRQ,MISO input ,the other output
  72.    *P_IOB_Attrib=0xffcf;  
  73.    *P_IOB_Data=0x0000;
  74.    
  75. }
  76.   void delay1us(unsigned char t)
  77. {
  78.     while(--t)
  79.        *P_Watchdog_Clear=1;
  80. }
  81. unsigned char SPI_RW(unsigned char byte)   //寫一個(gè)字節(jié)到24L01,同時(shí)讀一個(gè)字節(jié)
  82. {
  83.      unsigned char bit_ctr;
  84.         
  85.      for(bit_ctr=0;bit_ctr<8;bit_ctr++)   //output 8-bit
  86.        {
  87.            if(byte&0x80)  
  88.               MOSI_High;
  89.            else
  90.              MOSI_Low;
  91.              byte=(byte<<1);
  92.              SCK_High;
  93.              if(MISO&0x0010) byte |= 1;       //SPI_ReceiveData=MISO;
  94.              SCK_Low;
  95.             
  96.            //  SPI_ReceiveData =( SPI_ReceiveData<<1);
  97.        }
  98.        return(byte);  //return read byte
  99. }
  100. unsigned char SPI_Read(unsigned char reg)
  101. {
  102.         unsigned char reg_val;

  103.           CSN_Low;             // CSN low, initialize SPI communication...
  104.           SPI_RW(reg);            // Select register to read from..
  105.           reg_val = SPI_RW(0);    // ..then read registervalue
  106.           CSN_High;                // CSN high, terminate SPI communication

  107.           return(reg_val);        // return register value
  108. }

  109. /****向寄存器reg寫一個(gè)字節(jié),同時(shí)返回狀態(tài)字節(jié)**************/
  110. unsigned char SPI_RW_Reg(unsigned char reg,unsigned char value)
  111. {
  112.    unsigned char status;
  113.    CSN_Low;
  114.    status=SPI_RW(reg);   //select register  and write value to it
  115.    SPI_RW(value);   
  116.    CSN_High;
  117.    return(status);     
  118. }
  119. /********讀出bytes字節(jié)的數(shù)據(jù)*************************/
  120. unsigned char SPI_Read_Buf(uchar reg,uchar *pBuf,uchar bytes)
  121. {
  122.   uchar status,byte_ctr;
  123.   CSN_Low;
  124.   status=SPI_RW(reg);      
  125.   for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
  126.            pBuf[byte_ctr]=SPI_RW(0);
  127.    CSN_High;
  128.    return(status);
  129. }
  130. /****************寫入bytes字節(jié)的數(shù)據(jù)*******************/
  131. unsigned char SPI_Write_Buf(uchar reg,uchar *pBuf,uchar bytes)
  132. {
  133.    uchar status,byte_ctr;
  134.    CSN_Low;
  135.    delay1us(1);
  136.    status=SPI_RW(reg);      
  137.    for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
  138.                    SPI_RW(*pBuf++);
  139.    CSN_High;
  140.    delay1us(1);
  141.    return(status);
  142. }
  143. /*接收函數(shù),返回1表示有數(shù)據(jù)收到,否則沒有數(shù)據(jù)接收到**/
  144. unsigned char nRF24L01_RxPacket(unsigned char *rx_buf)
  145. {
  146.    unsigned char sta,revale=0;               
  147.    SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);  
  148.    CE_High;
  149.    delay1us(10);
  150.    
  151.   sta=SPI_Read(STATUS);                 // read register STATUS's value
  152.    if(RX_DS)                                            // if receive data ready (RX_DR) interrupt
  153.     {
  154.                   CE_Low;                // stand by mode
  155.                   SPI_Read_Buf(RD_RX_PLOAD,rx_buf,WR_TX_PLOAD); // read receive payload from RX_FIFO buffer
  156.                      revale =1;
  157.      }
  158.      SPI_RW_Reg(WRITE_REG+STATUS,sta);   // clear RX_DR or TX_DS or MAX_RT interrupt flag
  159.      return revale;
  160.    
  161. }
  162. /****************發(fā)送函數(shù)***************************/
  163. void nRF24L01_TxPacket(unsigned char *tx_buf)
  164. {
  165.      CE_Low;                //  CE=0;
  166.      SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);       // WritesTX_Address to nRF24L01
  167.      SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);     //RX_Addr0 same as TX_Adr for Auto.Ack
  168.      SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);   // Writes data to TX payload
  169.      SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);            // Set PWR_UP bit, enable CRC(2 bytes) &Prim:TX. MAX_RT & TX_DS enabled..
  170.      CE_High;                //CE=1;
  171.      delay1us(10);
  172.      CE_Low;       //CE=0;
  173. }   
  174. void RX_Mode(void)
  175. {
  176.         CE_Low;   //CE=0;
  177.         delay1us(1);
  178.     SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
  179.           SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
  180.           SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload

  181.           SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
  182.           SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  183.           SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
  184.           SPI_RW_Reg(WRITE_REG + RF_CH, 40);        // Select RF channel 40
  185.           SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
  186.           SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..


  187.           CE_High;   //CE = 1   Set CE pin high to enable RX device
  188.     delay1us(1);
  189.   //  This device is now ready to receive one packet of 16 bytes payload from a TX device sending to address
  190.   //  '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.
  191. }
  192. void TX_Mode(void)
  193. {
  194.         CE_Low;      //CE=0;
  195.         delay1us(1);
  196.           SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
  197.           SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
  198.           SPI_Write_Buf(WR_TX_PLOAD,Tx_Buffer, TX_PLOAD_WIDTH);         // Writes data to TX payload

  199.          SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
  200.           SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  201.           SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
  202.           SPI_RW_Reg(WRITE_REG + RF_CH, 40);        // Select RF channel 40
  203.           SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
  204.           SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
  205.    
  206.     CE_High;    //        CE=1;  
  207.     delay1us(1);  
  208. }
  209. void nRF24L01_Initial(void)
  210. {
  211.           CE_Low;                        //nRF24L01_CE=0;                         chip enable
  212.           CSN_High;                        //nRF24L01_CSN=1;                         Spi disable
  213.           SCK_Low;          //nRF24L01_SCK=0;                         Spi clock line init high
  214.         
  215.         
  216. }
  217. /****************** 配置函數(shù)********************************/
  218. void nRF24L01_Config(void)
  219. {
  220.           //initial io
  221.      CE_Low;          //        CE=0 ;chip enable
  222.      CSN_High;       //CSN=1   Spi disable
  223.      SCK_Low;       //SCK=0   // Spi clock line init high
  224.      CE_Low;        //CE=0;
  225.         SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 bytes) &Prim:RX. RX_DR enabled..
  226.     SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
  227.     SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
  228.     SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x02); // Setup address width=5 bytes
  229.     SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
  230.     SPI_RW_Reg(WRITE_REG + RF_CH, 0);
  231.     SPI_RW_Reg(WRITE_REG + RF_SETUP,0x0f); // TX_PWR:0dBm, Datarate:2Mbps,
  232. }  
  233. main()
  234. {   
  235.    int a;
  236.   Initial_IOB();
  237.   nRF24L01_Initial();
  238.   TX_Mode();
  239.   // RX_Mode();
  240.    while(1)
  241.     {
  242.          
  243.            //自己添加要發(fā)送的內(nèi)容到數(shù)組里
  244.            
  245.       ///   nRF24L01_TxPacket(*****)
  246.               delay1us(100);
  247.                   *P_Watchdog_Clear=1;
  248.     }
  249. }
復(fù)制代碼

全部資料(壓縮包)下載:

NRF24L01原理圖.rar

2.74 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

參考設(shè)計(jì)例程.zip

1.57 MB, 下載次數(shù): 9, 下載積分: 黑幣 -5

相關(guān)參考設(shè)計(jì)文檔.zip

7.03 MB, 下載次數(shù): 8, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:112693 發(fā)表于 2016-6-6 12:52 | 只看該作者
經(jīng)典,參考了,謝謝樓主
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表