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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14832|回復: 8
打印 上一主題 下一主題
收起左側

NRF24L01驅動程序及中文說明書手冊下載(51單片機和STM32)

  [復制鏈接]
跳轉到指定樓層
樓主
分享NRF24L01簡單驅動,51程序,STM32程序都有,還有各種相關的非常詳細的資料,下面一起來看看吧:





NRF24L01中文說明書手冊:
nRF24L01P(新版無線模塊控制IC).PDF
nRF24L01中文說明書.pdf
NRF24L01功能使用文檔.pdf
RF產品設計經驗.pdf
安信可2.4G模塊選型及使用詳解.pdf

NRF24L01引腳圖:


NRF24L01簡介:

NRF24L01參數:


NRF24L01結構方框圖:


NRF24L01引腳功能:


單片機源程序如下LCD1602顯示:
  1. /*NRF24L01+無線模塊(和2.4G模塊)測試 LCD1602 單位通道和多通道測試完成
  2. 和2.4G模塊(兩種)混合使用時,NRF24L01用于接收正常,NRF24L01相同配置下用于發送時接收不到應答

  3. 以下為個人理解(歡迎指正):
  4. 1,發送和接收模塊要設置相同的發射頻率(寄存器0x05),傳輸速率(寄存器0x06),CRC長度(寄存器0x00)
  5.    和自動應答(寄存器0x01)是否.
  6. 2,發送模塊通道0的地址是應答時用的,要和發送地址(寄存器0xa0)是一樣的,自動重發設置(寄存器0x04),
  7.    上電和設置為發送模式(寄存器0x00).
  8. 3,接收模塊可以用任一通道接收,把要接收的通道地址(寄存器0x0a~0x0f)設置和發送模塊的發送地址相
  9.    同即可,然后把用到的通道的應答(寄存器0x01)打開,通道接收(寄存器0x02)打開,設置通道有效位寬
  10.    度(寄存器0x11~0x16)(1次性接收的有效數據是多少個(可設0~32)),上電和設置為接收模式(寄存器0x00).
  11. 4.網上看到:使用靠后通道要把前面的通道一起配置,經測試可以直接使用第6個通道接收,前面5個通道不用
  12.    設置,但發送模式時,應答只能默認在通道0,接收模式通道隨意使用.
  13. 5.由于條件有限,不好全部功其都測試,它設置可參考一起打包的中文使用手冊,見諒*/

  14. #include<reg52.h>
  15. #define uchar unsigned char
  16. #define uint unsigned int

  17. sbit LCD_RS=P2^6;                                //LCD 數據/命令 端口
  18. sbit LCD_RW=P2^5;                                //LCD 讀/寫 端口
  19. sbit LCD_EN=P2^7;                                //LCD 使能 端口
  20. sbit LCD_BF=P0^7;                                //LCD 忙碌標志位

  21. sbit NRFT_IRQ =P1^0;                        //中斷信號,無線通信過程中MCU主要是通過IRQ與NRF24L01進行通信
  22. sbit NRFT_MISO=P1^1;                        //芯片控制數據線(主入從出)
  23. sbit NRFT_MOSI=P1^2;                        //芯片控制數據線(主出從入)
  24. sbit NRFT_SCK =P1^3;                        //芯片控制的時鐘線(SPI 時鐘)
  25. sbit NRFT_CSN =P1^4;                        //芯片的片選線,CSN為低電平芯片工作
  26. sbit NRFT_CE  =P1^5;                        //芯片的模式控制線.在CSN為低的情況下,
  27.                                                                 //CE協同NRF24L01的CONFIG寄存器共同決定NRF24L01的狀態
  28. sbit NRFR_IRQ =P3^7;                        //中斷信號,無線通信過程中MCU主要是通過IRQ與NRF24L01進行通信
  29. sbit NRFR_MISO=P3^6;                        //芯片控制數據線(主入從出)
  30. sbit NRFR_MOSI=P3^5;                        //芯片控制數據線(主出從入)
  31. sbit NRFR_SCK =P3^4;                        //芯片控制的時鐘線(SPI 時鐘)
  32. sbit NRFR_CSN =P3^3;                        //芯片的片選線,CSN為低電平芯片工作
  33. sbit NRFR_CE  =P3^2;                        //芯片的模式控制線.在CSN為低的情況下,
  34.                                                                 //CE協同NRF24L01的CONFIG寄存器共同決定NRF24L01的狀態

  35. sbit KEY_UPP=P2^1;                                //按鍵上
  36. sbit KEY_LOW=P2^2;                                //按鍵下
  37. sbit KEY_LEF=P2^3;                                //按鍵左
  38. sbit KEY_RIG=P2^4;                                //按鍵右

  39. sbit OK=P2^0;                                        //程序測試位

  40. code uchar TAB[]="0123456789ABCDEF";                                        //lcd顯示寄存器用的字符
  41. uchar TAB_RX_DAT[32];                                                                        //接收到的數據讀到這
  42. code uchar TAB_TR_ADDR[]={0x0f,0x02,0x03,0x04,0x05};        //發送,接收及應答用的地址

  43. uchar num=7;                                                                //lcd要顯示的寄存器

  44. void Delay(uint xms)                                                //延時(12M晶振約1ms)
  45. {
  46.         uint i;
  47.         for(;xms>0;xms--)
  48.                 for(i=123;i>0;i--);
  49. }
  50. void LCD_Read_BF()                                                        //讀lcd的忙碌標記位
  51. {
  52.         uint i=10000;
  53.         P0=0xff;
  54.         LCD_RS=0;
  55.         LCD_RW=1;
  56.         LCD_EN=1;
  57.         while((LCD_BF==1)&&(i-->0));                        //i-->0;意思是如果讀lcd忙碌標記錯誤,i從10000減至0也跳出
  58.         LCD_EN=0;
  59. }
  60. void LCD_Write_DAT(uchar dat)                                //lcd寫入數據
  61. {
  62.         LCD_Read_BF();
  63.         LCD_RS=1;
  64.         LCD_RW=0;
  65.         P0=dat;         
  66.         LCD_EN=1;
  67.         LCD_EN=0;
  68. }
  69. void LCD_Write_CMD(uchar cmd)                                //lcd寫入命令
  70. {
  71.         LCD_Read_BF();
  72.         LCD_RS=0;
  73.         LCD_RW=0;
  74.         P0=cmd;         
  75.         LCD_EN=1;
  76.         LCD_EN=0;
  77. }
  78. void LCD_Init()                                                                //lcd初始化
  79. {
  80.         LCD_RW=1;
  81.         LCD_RS=0;
  82.         LCD_EN=0;
  83.         LCD_Write_CMD(0x38);
  84.         LCD_Write_CMD(0x0c);
  85.         LCD_Write_CMD(0x06);
  86.         LCD_Write_CMD(0X01);
  87. }
  88. uchar SPIT_RW(uchar dat)                                        //發送模塊 SPI總線讀寫(NRF24L01接口)
  89. {
  90.         uchar i,val;
  91.         for(i=8;i>0;i--)
  92.         {
  93.                 NRFT_MOSI=(bit)(dat&0x80);
  94.                 dat<<=1;
  95.                 NRFT_SCK=1;         
  96.                 val<<=1;
  97.                 val|=NRFT_MISO;
  98.                 NRFT_SCK=0;
  99.         }
  100.         return val;
  101. }
  102. uchar NRFT_Read_REG(uchar reg)                                //發送模塊 讀寄存器1個數據
  103. {
  104.         uchar val;
  105.         NRFT_CSN=0;
  106.         SPIT_RW(reg);
  107.         val=SPIT_RW(0xff);
  108.         NRFT_CSN=1;
  109.         return val;
  110. }
  111. uchar NRFT_Write_REG(uchar reg,uchar dat)        //發送模塊 寫1個數據到寄存器
  112. {                                      //寄存器,要寫入數據
  113.         uchar val;
  114.         NRFT_CSN=0;
  115.         val=SPIT_RW(0x20|reg);                        //NRF寫入配置寄存器時規定bit6=bit7=0,bit5=1,bit0-bit4為有效位
  116.         SPIT_RW(dat);
  117.         NRFT_CSN=1;
  118.         return val;
  119. }
  120. uchar NRFT_Write_BUF(uchar reg,uchar *pBUF,uchar bytes)//發送模塊 寫入多個數據到寄存器
  121. {                                 //寄存器,要寫入數據的首地址,寫入數據的數量
  122.         uchar temp,i;
  123.         NRFT_CSN=0;
  124.         temp=SPIT_RW(reg|0x20);                        //NRF寫入配置寄存器時規定bit6=bit7=0,bit5=1,bit0-bit4為有效位
  125.         Delay(1);
  126.         for(i=0;i<bytes;i++)
  127.                 SPIT_RW(*pBUF++);
  128.         NRFT_CSN=1;
  129.         return temp;
  130. }
  131. /*uchar NRFT_Read_BUF(uchar reg,uchar *pBUF,uchar bytes)//讀出發送模塊的多個數據(讀出收到的數據)
  132. {
  133.         uchar temp,i;
  134.         NRFT_CSN=0;
  135.         temp=SPIT_RW(reg);
  136.         Delay(1);
  137.         for(i=0;i<bytes;i++)
  138.                 *pBUF++=SPIT_RW(0xff);
  139.         NRFT_CSN=1;
  140.         return temp;
  141. }*/
  142. uchar SPIR_RW(uchar dat)                                        //接收模塊 SPI總線讀寫(NRF24L01接口)
  143. {
  144.         uchar i,val;
  145.         for(i=8;i>0;i--)
  146.         {
  147.                 NRFR_MOSI=(bit)(dat&0x80);
  148.                 dat<<=1;
  149.                 NRFR_SCK=1;         
  150.                 val<<=1;
  151.                 val|=NRFR_MISO;
  152.                 NRFR_SCK=0;
  153.         }
  154.         return val;
  155. }
  156. uchar NRFR_Read_REG(uchar reg)                                //接收模塊 讀寄存器1個數據
  157. {
  158.         uchar val;
  159.         NRFR_CSN=0;
  160.         SPIR_RW(reg);
  161.         val=SPIR_RW(0xff);
  162.         NRFR_CSN=1;
  163.         return val;
  164. }
  165. uchar NRFR_Write_REG(uchar reg,uchar dat)        //接收模塊 寫1個數據到寄存器
  166. {
  167.         uchar val;
  168.         NRFR_CSN=0;
  169.         val=SPIR_RW(0x20|reg);                        //NRF寫入配置寄存器時規定bit6=bit7=0,bit5=1,bit0-bit4為有效位
  170.         SPIR_RW(dat);
  171.         NRFR_CSN=1;
  172.         return val;
  173. }
  174. uchar NRFR_Write_BUF(uchar reg,uchar *pBUF,uchar bytes)//接收模塊 寫入多個數據到寄存器
  175. {                                 //寄存器,要寫入數據的首地址,寫入數據的數量
  176.         uchar temp,i;
  177.         NRFR_CSN=0;
  178.         temp=SPIR_RW(reg|0x20);                        //NRF寫入配置寄存器時規定bit6=bit7=0,bit5=1,bit0-bit4為有效位
  179.         Delay(1);
  180.         for(i=0;i<bytes;i++)
  181.                 SPIR_RW(*pBUF++);
  182.         NRFR_CSN=1;
  183.         return temp;
  184. }
  185. uchar NRFR_Read_BUF(uchar reg,uchar *pBUF,uchar bytes)//接收模塊 讀出的多個數據(讀出收到的數據)
  186. {                                 //寄存器,讀出數據存放的首地址,寫入數據的數量
  187.         uchar temp,i;
  188.         NRFR_CSN=0;
  189.         temp=SPIR_RW(reg);
  190.         Delay(1);
  191.         for(i=0;i<bytes;i++)
  192.                 *pBUF++=SPIR_RW(0xff);
  193.         NRFR_CSN=1;
  194.         return temp;
  195. }
  196. void NRFT_Init()                                                        //NRF24L01發送模塊初始化
  197. {
  198.         code uchar NRFT_TX_DAT[]={"abcdefghijklmnopABCDEFGHIJKLMNOP"};//要發送出去的數據                          
  199.         NRFT_CE=0;                        //關模塊(無論是發送還是接收)
  200.         NRFT_CSN=1;                        //SPI通信的片選使能
  201.         NRFT_SCK=0;                        //SPI通信的時鐘(這里選擇空閑時為低電平)
  202.         NRFT_IRQ=1;                        //NRF模塊的中斷輸出端(中斷發生輸出低電平)

  203.         NRFT_Write_BUF(0x10,TAB_TR_ADDR,0x05);                //發送地址(接收模塊通道地址)
  204.         NRFT_Write_BUF(0x0a,TAB_TR_ADDR,0x05);                //數據通道0接收地址(發送模塊總是用通道0作為答)
  205.         NRFT_Write_BUF(0xa0,NRFT_TX_DAT,32);        //寫入要發送的數據(1-32字節,用于發送模式)

  206.         NRFT_Write_REG(0x01,0x01);                                //自動應答使能(發送模塊總是用通道0作為答)
  207.         NRFT_Write_REG(0x02,0x01);                                //接收地址允許(發送模塊的通道1要接收應答信號)
  208.         NRFT_Write_REG(0x04,0x12);                                //建立自動重發(高4位自動重發間隔時間,低4位重發次數)
  209.         NRFT_Write_REG(0x05,40);                                //射頻通道(頻率[0-127])(Fo=(2400+RF_CH)*MHz)
  210.         NRFT_Write_REG(0x06,0x07);                                //射頻設置

  211.         NRFT_Write_REG(0x00,0x0e);                                //配置為上電,發送模式

  212.         NRFT_CE=1;                                                                //使能模塊接收或者發送
  213. }
  214. void NRFR_Init()                                                        //NRF24L01接收模塊初始化
  215. {
  216.         code uchar TAB_P1_ADDR[]={0x0b,0x02,0x03,0x04,0x05};
  217.                                                 //通道5的前4字節地址和通道1共用,用通道5也要設置通道1,用兩地址不應相同                          
  218.         NRFR_CE=0;                        //關模塊(無論是發送還是接收)
  219.         NRFR_CSN=1;                        //SPI通信的片選使能
  220.         NRFR_SCK=0;                        //SPI通信的時鐘(這里選擇空閑時為低電平)
  221.         NRFR_IRQ=1;                        //NRF模塊的中斷輸出端(中斷發生輸出低電平)

  222.         NRFR_Write_BUF(0x0b,TAB_P1_ADDR,0x05);                //數據通道1接收地址(這里用通道1作為存放接收地址)
  223.         NRFR_Write_REG(0x0f,TAB_TR_ADDR[0]);                //數據通道5接收地址(只用1字節,共用通道1的4個高字節)

  224.         NRFR_Write_REG(0x01,0X20);                                //自動應答使能 只開通道5(用哪個通道接收就用哪個通道應答)                                                               
  225.         NRFR_Write_REG(0x02,0X20);                                //接收通道允許 只開通道5(b0-b5為接收通道0-5使能位)
  226.         NRFR_Write_REG(0x05,40);                                //射頻通道(頻率)(頻率[0-127])(Fo=(2400+RF_CH)*MHz)
  227.         NRFR_Write_REG(0x06,0X07);                                //射頻設置

  228. //        NRFR_Write_REG(0x11,32);                                //通道0有效字節寬度(0-32)
  229. //        NRFR_Write_REG(0x12,32);                                //通道1有效字節寬度(0-32)
  230. //        NRFR_Write_REG(0x13,32);                                //通道2有效字節寬度(0-32)
  231. //        NRFR_Write_REG(0x14,32);                                //通道3有效字節寬度(0-32)
  232. //        NRFR_Write_REG(0x15,32);                                //通道4有效字節寬度(0-32)
  233.         NRFR_Write_REG(0x16,32);                                //通道5有效字節寬度(0-32)
  234.         NRFR_Write_REG(0x00,0X0f);                                //配置為上電,接收模式

  235.         NRFR_CE=1;                                                                //使能模塊接收或者發送
  236. }
  237. void Init()                                                                        //初始化
  238. {
  239.         Delay(100);
  240.         LCD_Init();
  241.         NRFR_Init();
  242.         NRFT_Init();
  243.         Delay(100);
  244. }
  245. uchar Keys(uchar dat)                                                //按鍵
  246. {
  247.         if(KEY_UPP==0&&dat<0x1f)                                //修改要顯示的寄存器
  248.         {
  249.                 Delay(10);
  250.                 if(KEY_UPP==0)
  251.                 {
  252.                         dat++;
  253.                         while(!KEY_UPP);
  254.                 }
  255.         }
  256.         else if(KEY_LOW==0&&dat!=0)                                //修改要顯示的寄存器
  257.         {
  258.                 Delay(10);
  259.                 if(KEY_LOW==0)
  260.                 {
  261.                         dat--;
  262.                         while(!KEY_LOW);
  263.                 }
  264.         }
  265.         return dat;
  266. }
  267. void DIS_LCD()                                                                //顯示
  268. {
  269.         uchar temp;
  270.         num=Keys(num);                                                        //修改要顯示的寄存器
  271.         LCD_Write_CMD(0x80);                                        //在lcd1602的第一行開始寫入
  272.         LCD_Write_DAT(TAB[num>>4]);
  273.         LCD_Write_DAT(TAB[num&0x0f]);
  274.         LCD_Write_DAT(' ');
  275.         LCD_Write_DAT('T');
  276.         LCD_Write_DAT(':');
  277.         temp=NRFT_Read_REG(num);                                //讀發送模塊的寄存器
  278.         LCD_Write_DAT(TAB[temp>>4]);
  279. ……………………

  280. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
NRF24L01無線模塊.rar (5.38 MB, 下載次數: 503)



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

使用道具 舉報

沙發
ID:212923 發表于 2018-5-9 10:01 | 只看該作者
學習一下
回復

使用道具 舉報

板凳
ID:361623 發表于 2018-6-29 11:36 | 只看該作者
這個芯片看的一頭霧水
回復

使用道具 舉報

地板
ID:265995 發表于 2019-1-30 18:51 | 只看該作者
不錯
學習一下
回復

使用道具 舉報

5#
ID:318927 發表于 2019-2-23 13:25 | 只看該作者
51代碼沒用過,不知道,但那32的代碼有問題19個錯誤,1個警告
回復

使用道具 舉報

6#
ID:417702 發表于 2019-3-23 09:39 | 只看該作者
學習了
回復

使用道具 舉報

7#
ID:296060 發表于 2019-5-29 14:16 | 只看該作者
學習一下。。
回復

使用道具 舉報

8#
ID:156302 發表于 2019-6-5 13:32 | 只看該作者
學習一下。。
回復

使用道具 舉報

9#
ID:709498 發表于 2020-3-16 15:27 | 只看該作者
正在學習,謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九热免费看 | 久久一级免费视频 | 中文字幕在线一区 | 99精品久久久久久久 | 中文字幕成人 | 久久久精品影院 | av片在线观看网站 | 亚洲精品女优 | 色就是色欧美 | 国产午夜精品一区二区三区嫩草 | 久久久久亚洲精品 | 久久夜视频 | 欧美大片久久久 | xxxcom在线观看 | 99久久精品免费看国产小宝寻花 | 精品久久久久久中文字幕 | 亚洲免费视频播放 | 欧美日韩综合精品 | 99久久精品免费看国产免费软件 | 一本色道精品久久一区二区三区 | 亚洲91| 成人一区av偷拍 | 岛国av免费在线观看 | 免费成人在线网站 | 亚洲精品乱码久久久久久黑人 | 欧美天堂 | 一区二区成人在线 | 91新视频 | 欧美性极品xxxx做受 | 欧美乱码精品一区二区三区 | 成人精品国产免费网站 | 精品久久久久香蕉网 | 成人在线视频网址 | 亚洲首页 | 五月婷婷色 | 亚洲一区二区三区高清 | 成人免费视屏 | 特一级毛片 | 337p日本欧洲亚洲大胆 | 黄色一级毛片免费看 | 爱爱视频网|