公告:

STM32F103两个单片机的NRF24L01的发送接收调试代码

作者:智凡单片机 / 时间:2年前 (2018/07/08) / 分类:RFID / 阅读:2463 / 评论:0

一个开发板是STM32F103RC MINI,板载了LCD液晶显示,以及按键键盘,因此采用按键进行收发模式的选择,采用该液晶显示接收与发送的数据。

timg (1).jpg

另外一个采用的是STM32F103RB最小核心系统板,没有板载LCD等外设,因此我采用了外接CP2102模块(需要下载驱动以及串口调试助手),进行收发模式的选择以及显示NRF接收与发送的数据。

以下是STM32F103RB最小核心系统板的主程序。另外一个开发板,主程序类似,只是换成LCD显示就可以了。

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "key.h"
#include "spi.h"
#include "24l01.h"   
 
 int main(void)
 { 
    u8 tmp_buf[33];//加入字符串结束符 
u8 ReceivedData; //串口接收数据
u8 mode;
u8 key=1;
int t=0;
delay_init();     //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(9600); //串口初始化为9600
LED_Init();  //初始化与LED连接的硬件接口
 
 NRF24L01_Init();    //初始化NRF24L01  
 
 
 while(NRF24L01_Check())//检查NRF24L01是否在位.
{
printf("NRF24L01 Error");
delay_ms(200);
 delay_ms(200);
}   
printf("NRF24L01 OK");
 while(1)
 {
         
  while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
    {
    
   
    ReceivedData = USART_ReceiveData(USART1);
        
        if (ReceivedData == '1')
{
           
            GPIO_ResetBits(GPIOC,GPIO_Pin_13);;
delay_ms(150);  
            printf("LED1(ON),1陈豪杰最漂亮 核心板进入接收模式RX\n\n");
 
 NRF24L01_RX_Mode();
while(1)
{           
if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
{
tmp_buf[32]=0;//加入字符串结束符
printf("接收data;%s \n",tmp_buf);  
}else delay_us(100);   
t++;
if(t==10000)//大约1s钟改变一次状态
{
t=0;
LED0=!LED0;  
        }
}
}
else if(ReceivedData=='2')
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);;
delay_ms(150);  
           GPIO_SetBits(GPIOC,GPIO_Pin_13);;
delay_ms(150);            
            printf("LED1(on and OFF),2陈豪杰最优秀 核心板进入发送模式TX\n\n");
NRF24L01_TX_Mode();
while(1)
{
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
printf("Sended DATA:%s \n\n",tmp_buf);
key=mode;
for(t=0;t<32;t++)
{
key++;
if(key>('~'))key=' ';
tmp_buf[t]=key;
}
mode++; 
if(mode>'~')mode=' ';    
tmp_buf[32]=0;//加入结束符
     GPIO_ResetBits(GPIOC,GPIO_Pin_13);;
delay_ms(150);  
           GPIO_SetBits(GPIOC,GPIO_Pin_13);;
delay_ms(150);
}else
{  
 printf("Send Failed "); 
        }
    }
       
  }
else if(ReceivedData=='0')
{
           GPIO_SetBits(GPIOC,GPIO_Pin_13);;
delay_ms(150);
            
            printf("LED1(OFF),0魔镜魔镜谁是世界上最美的人 核心板进入休眠\n\n");
        }
}
}
}


没有评论,留下你的印记,证明你来过。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。