STM32F103与电脑端通信(使用NRF24L01)

您所在的位置:网站首页 stm32f103代码能给f7吗 STM32F103与电脑端通信(使用NRF24L01)

STM32F103与电脑端通信(使用NRF24L01)

2023-10-02 17:14| 来源: 网络整理| 查看: 265

用NRF24L01实现电脑和单片机的通信 一、前言二、用到的硬件和软件1.硬件2.软件3.NRF24L01参数 三、测试过程四、结论

本文章由妖怪之山荷城科技协会提供技术支持 在这里插入图片描述

本文章是基于原子的例程和开发板来解决的 想要直接看方法,请直接看二、用到的软硬件和四、结论

一、前言

做毕设的时候想用NRF24L01实现电脑和单片机的通信,结果能实现电脑和电脑的通信、单片机和单片机之间的通信,唯独实现不了电脑和单片机之间的通信,最后经过半天的折腾解决了。 简单比喻就是,两个城镇,A镇和B镇的人想要互相写信,两个城镇的人语言是相同的,但是邮政系统对信封的格式不一样。A镇使用A格式,B镇使用B格式。当A镇人用A格式发给B镇,B镇邮政拿到信封看到格式不对,就当垃圾处理了。反过来同理。

二、用到的硬件和软件

注:这里用的是原子的例程,无线通讯实验

1.硬件

①原子STM32F103战舰版 ②原子STM32F103最小系统板 ③NRF24L01模块×2(淘宝链接,下同https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm?spm=a21bo.2017.1997525045.2.2b0811d9oY9Bqr) ④USB转SPI通信模块一个在这里插入图片描述

2.软件

①Keil5 ②Xcom

3.NRF24L01参数

①波特率:115200 ②传输速率:2Mbps ③收发地址:0x34,0x43,0x10,0x10,0x01(原子例程中的地址) ④通信频率:2.440GHz ⑤CRC校验位:16位

三、测试过程

我先解决的是单片机发送给电脑端。 因为我之前弄过蓝牙的单片机和电脑端通信,知道串口助手只接收特定格式的数据,即数据的末尾两位数据帧必须是0x0d,0x0a。接着我翻了一圈原子的例程,没有发现末尾没有加格式帧,于是自己写了一串字符,加了数据帧,然后发送,上位机能收到了。

LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode\r\n"); NRF24L01_TX_Mode(); while(1) { if(NRF24L01_TxPacket(tmp_buf)==TX_OK) { LCD_ShowString(30,170,239,32,16,"Sended DATA:"); LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf); key=mode; sprintf((char*)tmp_buf,"NRFL2401 is ok!\r\n");//把双引号内的东西以指定格式送到tmp_buf里去 //末尾加上格式帧0x0d,0x0a tmp_buf[30]=0x0d; tmp_buf[31]=0x0a; }else { LCD_Fill(0,170,lcddev.width,170+16*3,WHITE); LCD_ShowString(30,170,lcddev.width-1,32,16,"Send Failed"); //清空显示 }; LED0=!LED0; delay_ms(150); };

然后是电脑端发送给单片机端。 因为前车之鉴,我先用两块单片机做无线通信,把33帧数据帧全部显示出来看了看(伏笔),没发现什么格式的,然后再试了一次单片机和电脑通信,让单片机把传过来的数据逐帧显示,然后发现跟单片机之间互通之间的区别是,电脑发送的数据,第0帧记录了由几帧数据,第1帧之后的数据才是有用的。 然后我写了一个for循环调整把第0位剔除,这样单片机就能显示了

LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode"); LCD_ShowString(30,170,200,16,16,"Received DATA:"); NRF24L01_RX_Mode(); while(1) { if(NRF24L01_RxPacket(tmp_buf)==0)//收到则开始显示 { tmp_buf[32]=0;//结束标志,测试了一下好像没啥关系 for(i=i;i t=0; LED0=!LED0; } }; 四、结论

1、首先检查单片机和PC端两端的无线通信设置是否一致 2、单片机发送数据到单片机端:单片机发送数据的末尾两帧务必加上0x0d,0x0a (另外观察到如果0x0d,0x0a在31和32帧,后面的数据会出现乱码,在30和31帧设置则不会)。 3、电脑端发送数据到单片机端:单片机处理收到的数据,要么直接取1~32位的数据,要么用循环,把第0位格式帧剔

经过以上步骤,就能用NRF24L01实现单片机和STM32的上下位机通讯了

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3