久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4548|回復: 1
收起左側

無線收發器 itead arduino 2.4G無線模塊 RF數傳通信模塊配套資料

[復制鏈接]
ID:124161 發表于 2016-6-6 10:31 | 顯示全部樓層 |閱讀模式
   NRF24L01是一款工作在2.4-2.5GHz世界通用ISM頻段的單片收發芯片,無線收發器包括:頻率發生器 增強型 SchockBurstTM 模式控制器 功率放大器 晶體放大器 調制器 解調器 輸出功率頻道選擇和協議的設置可以通過SPI接口進行設置極低的電流消耗,當工作在發射模式下發射功率為6dBm時電流消耗為9.0mA 接受模式為12.3mA掉電模式和待機模式下電流消耗模式更低。

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

特性如下:

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

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

3.多頻點:125 頻點,滿足多點通信和跳頻通信需要

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

5.低功耗:當工作在應答模式通信時,快速的空中傳輸及啟動時間,極大的降低了電流消耗。

6.低應用成本:NRF24L01集成了所有與RF協議相關的高速信號處理部分,比如:自動重發丟失數據包和自動產生應答信號等,NRF24L01的SPI接口可以利用單片機的硬件SPI口連接或用單片機I/O口進行模擬,內部有FIFO可以與各種高低速微處理器接口,便于使用低成本單片機。

7.便于開發:由于鏈路層完全集成在模塊上,非常便于開發。自動重發功能,自動檢測和重發丟失的數據包,重發時間及重發次數可軟件控制自動存儲未收到應答信號的數據包自動應答功能,在收到有效數據后,模塊自動發送應答信號,無須另行編程載波檢測—固定頻率檢測內置硬件CRC 檢錯和點對多點通信地址控制數據包傳輸錯誤計數器及載波檢測功能可用于跳頻設置可同時設置六路接收通道地址,可有選擇性的打開接收通道標準插針Dip2.54MM間距接口,便于嵌入式應用


0.png


0.png

原代碼:
  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)   //寫一個字節到24L01,同時讀一個字節
  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寫一個字節,同時返回狀態字節**************/
  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字節的數據*************************/
  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字節的數據*******************/
  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. /*接收函數,返回1表示有數據收到,否則沒有數據接收到**/
  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. /****************發送函數***************************/
  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. /****************** 配置函數********************************/
  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.            //自己添加要發送的內容到數組里
  244.            
  245.       ///   nRF24L01_TxPacket(*****)
  246.               delay1us(100);
  247.                   *P_Watchdog_Clear=1;
  248.     }
  249. }
復制代碼
0.png
全部資料(壓縮包)下載:

NRF24L01原理圖.rar

2.74 KB, 下載次數: 9, 下載積分: 黑幣 -5

參考設計例程.zip

1.57 MB, 下載次數: 9, 下載積分: 黑幣 -5

相關參考設計文檔.zip

7.03 MB, 下載次數: 8, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:112693 發表于 2016-6-6 12:52 | 顯示全部樓層
經典,參考了,謝謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品成人久久 | 亚洲一区二区欧美 | 国产高清在线精品一区二区三区 | 毛片大全 | 国产一区二区三区视频在线观看 | 黄色a视频 | 亚洲精品黄色 | 98久久 | 国产精品美女久久久久久不卡 | 国产99免费视频 | 婷婷一级片 | 天天插天天搞 | 国产免费一区二区 | 综合婷婷 | www亚洲成人 | 91视在线国内在线播放酒店 | 国产一级片网站 | 91精品观看 | 男人电影天堂 | 日日日干干干 | 精品国产乱码久久久久久丨区2区 | 亚洲成人综合在线 | 国产精品免费高清 | 99这里只有精品 | 青青草免费在线视频 | 久久久久亚洲精品国产 | 亚洲一区三区在线观看 | 欧美1区| 久久精品国产99国产精品亚洲 | 久久不卡| 成人一区二区三区 | 黑人一级黄色大片 | 麻豆一区一区三区四区 | 91夜夜夜| 免费在线观看黄网站 | 在线欧美小视频 | 99re国产| 可以在线看的黄色网址 | 国产高清毛片 | 在线免费国产 | 久久国产精品99久久久大便 |