找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6786|回复: 5
收起左侧

STM32中2.4G无线通信NRF24L01例程+资料

  [复制链接]
ID:515166 发表于 2019-4-18 09:08 | 显示全部楼层 |阅读模式
STM32中2.4G无线通信例程
0.png 0.png

按照如下方式在电路板上安排的管脚
       8  7
       6  5
       4  3
       2  1
各管脚如下定义:
8.IRQ            7.MISO
6.MOSI      5.SCK
4.CSN        3.CE  
2.VCC        1.GND
具体说明:
3.CE       芯片的模式控制线。在 CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)。                 
4.CSN      为芯片的片选线  CSN 为低电平芯片工作
5.SCK      为芯片控制的时钟线(SPI时钟)
6.MOSI     为芯片控制数据线(Master output slave input)    主输出  从输入
7.MISO     芯片控制数据线  (Master input slave output)  master 硕士 主人 船长   slave  从属奴隶                                                 主输入  从输出
8.IRQ     中断信号引脚。中断时变为低电平,即NRF24L01内部发生中断时IRQ 引脚从高电平变为低电平。引脚会在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、Rx FIFO 收到数据、达到最大重发次数。
中断:
nRF24L01 的中断引脚(IRQ)为低电平触发,当状态寄存器中TX_DS(数据发送完成中断位)、RX_DR(接收数据中断位) 或MAX_RT(达到最多次重发中断位)为高时触发中断。当MCU 给中断源写‘1’时,中断引脚被禁止。可屏蔽中断可以被IRQ 中断屏蔽。通过设置可屏蔽中断位为高,则中断响应被禁止。默认状态下所有的中断源是被禁止的。
在写寄存器之前一定要进入待机模式或掉电模式


单片机源程序如下:
  1. /* 下载程序后,首先要按下按键K_UP或者K_DOWN,按键K_UP是接收,K_DOWN是发送,两块开发板
  2.         只能一个作为发送一个作为接收,否则两个都为接收或者发送将进入死循环。接收的时候
  3.         指示灯闪烁  24L01的最大SPI时钟为10Mhz因此在设定SPI时钟的时候要低于10M*/

  4. #include "sys.h"
  5. #include "delay.h"
  6. #include "usart.h"
  7. #include "led.h"
  8. #include "button.h"
  9. #include "lcd_driver.h"
  10. #include "gui.h"
  11. #include "nrf24l01.h"


  12. void lcd_display()           //LCD初始化显示
  13. {
  14.         TFT_ClearScreen(BLACK);
  15.         GUI_Show12ASCII(10,10,"PRECHIN",GREEN,BLACK);
  16.         GUI_Show12ASCII(10,30,"123456",GREEN,BLACK);
  17.         GUI_Show12ASCII(10,50,"NRF24L01 Test!",GREEN,BLACK);        
  18.         GUI_Show12ASCII(10,70,"2015-11-13",GREEN,BLACK);
  19.         GUI_Show12ASCII(10,90,"K_UP:RX_Mode  K_DOWN:TX_Mode",GREEN,BLACK);
  20.         

  21. }
  22. void data_pros()        //数据处理函数
  23. {
  24.         u8 key;
  25.         static u8 mode=2;  //模式选择
  26.         u8 rx_buf[33]="123456 ";
  27.         static u16 t=0;
  28.         while(1)                //等待按键按下进行选择发送还是接收
  29.         {
  30.                 key=keyscan(0);        
  31.                 if(key==K_UP_PRESS)           //接收模式
  32.                 {
  33.                         mode=0;
  34.                         GUI_Show12ASCII(10,140,"RX_Mode",RED,BLACK);        
  35.                         GUI_Show12ASCII(10,160,"Received Data:",RED,BLACK);
  36.                         GUI_Show12ASCII(120,160,"                ",RED,BLACK);
  37.                         break;
  38.                 }
  39.                 if(key==K_DOWN_PRESS)         //发送模式
  40.                 {
  41.                         mode=1;
  42.                         GUI_Show12ASCII(10,140,"TX_Mode",RED,BLACK);
  43.                         GUI_Show12ASCII(10,160,"Send Data:    ",RED,BLACK);
  44.                         GUI_Show12ASCII(120,160,"              ",RED,BLACK);
  45.                         break;
  46.                 }        
  47.         }
  48.         
  49.         if(mode==0)                //接收模式
  50.         {        
  51.                 NRF24L01_RX_Mode();        
  52.                 while(1)
  53.                 {
  54.                         if(NRF24L01_RxPacket(rx_buf)==0) //接收到数据显示
  55.                         {
  56.                                 rx_buf[32]='\0';
  57.                                 GUI_Show12ASCII(120,160,rx_buf,RED,BLACK);
  58.                                 break;                        
  59.                         }
  60.                         else
  61.                         {
  62.                                 delay_ms(1);
  63.                         }
  64.                         t++;
  65.                         if(t==1000)
  66.                         {
  67.                                 t=0;
  68.                                 led1=~led1; //一秒钟改变一次状态
  69.                         }        
  70.                 }        
  71.         }
  72.         if(mode==1)                 //发送模式
  73.         {
  74.                                 
  75.                 NRF24L01_TX_Mode();
  76.                 while(1)
  77.                 {
  78.                         if(NRF24L01_TxPacket(rx_buf)==TX_OK)
  79.                         {
  80.                                 GUI_Show12ASCII(120,160,rx_buf,RED,BLACK);
  81.                                 break;        
  82.                         }
  83.                         else
  84.                         {
  85.                                 GUI_Show12ASCII(120,160,"Send Data Failed  ",RED,BLACK);
  86.                
  87.                         }        
  88.                 }        
  89.         }
  90. }

  91. int main(void)
  92. {        
  93.         u8 i=0;
  94.         delay_init();
  95.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  96.         uart_init(9600);
  97.         TFT_Init();        
  98.         led_init();
  99.         button_init();
  100.         NRF24L01_Init();
  101.         lcd_display();
  102.         while(NRF24L01_Check())         //检测NRF24L01是否存在
  103.         {
  104.                 GUI_Show12ASCII(140,50,"Error   ",RED,BLACK);                        
  105.         }
  106.         GUI_Show12ASCII(140,50,"Success",RED,BLACK);

  107.         while(1)
  108.         {                                
  109.                 data_pros();           
  110.                 i++;
  111. ……………………

  112. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
2.4G无线通信应用.7z (4.16 MB, 下载次数: 318)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:290380 发表于 2020-4-12 23:47 | 显示全部楼层
试试看,也许有用呢
回复

使用道具 举报

ID:885482 发表于 2021-2-22 10:21 | 显示全部楼层

我也试试看,也许有用呢
回复

使用道具 举报

ID:837062 发表于 2021-3-13 19:48 | 显示全部楼层
请问可以用f103c8t6吗
回复

使用道具 举报

ID:470227 发表于 2021-5-9 00:47 | 显示全部楼层
资料很有帮助!!!!学习了!!
回复

使用道具 举报

ID:937433 发表于 2021-6-14 15:41 | 显示全部楼层
amazing code ... nice work
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表