使用NRF24L01实现STM32之间、PC之间以及STM32和PC之间的通信

  1. 前言
  2. 硬件实现
  3. 软件实现
  4. 测试结果
  5. 结论

1. 前言

小弟最近看了一些中近距离(200m以内)的无线通信方法,像Zigbee/蓝牙/wifi等,实现起来比较复杂,需要一定程度的钻研。恰巧看到一款NRF24L01使用起来非常方便,并且本身有较佳的功耗和通信距离,网上有相当数量的学习资料和例程,因此上手把玩了一番。在调试过程中由于设备有限,遇到了些许bug,在此记录一下并分享给大家。

2. 硬件实现

学习阶段我们主要使用原子的STM32精英版作为主要调试平台,后期可以行使用一些最小开发版进行硬件和程序移植。
需求
① 原子 STM32F103ZET6精英板 x1
② NRF24L01模块 x2(淘宝链接,下同:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.11f12e8dTyZQGP&id=564248570460&_u=dddmocq4005)
③ NRF24L01-串口转USB转换模块 x2
连接
①与电脑相连: NRF24L01模块通过NRF24L01-串口转USB转换模块与PC的USB口相连。(需要注意需提前安装CH340驱动以保证PC能识别到端口)
②与单片机相连:STM32F103预留了wireless引脚块(使用SPI2),可以直接插入NRF24L01模块。另外可手动进行引脚匹配。

3. 软件实现

代码是有现成的,可以参考原子的源码及讲解课程第66讲 2.4G无线通信实验
需要注意的是要收发端的NRF24L01参数设置一致才可实现相互通信,主要涉及
①波特率9600(仅需确保PC串口波特率与NRF24L01-串口转USB转换模块一致,模块默认是9600)
②传输速率:2Mpbs
收发地址:0xFF, 0xFF, 0xFF, 0xFF, 0xFF(串口转USB转换模块默认地址,若PC与STM32通信,修改修改两者一致)
④通信频率:2.4Ghz(串口转USB转换模块默认,若PC与STM32通信,修改修改两者一致)
⑤CRC校验位:16位
注:PC端以上参数是封装在NRF24L01-串口转USB转换模块中的,需要使用串口发送AT命令来修改。

4. 测试结果

4.1PC与PC通信

插入两个NRF24L01模块,调用两个串口助手,使用其中一个串口发送消息’ABCDEFG’,另一个串口助手中可接收到’ABCDEFG’


4.2 STM32与STM32通信

参考原子的教程

4.3 PC与STM32通信

写在前面:NRF24L01-串口转USB转换模块在对发送和接收数据时进行了处理,因此如果直接使用单片机发送’ABCDEF’的数据,则会出现PC接收不到的情况。原因在于转换模块第0个字节是系统保留的,用于每次传输的包长度统计,实际用户可用的字节为1-31个。例如PC串口发送‘ABC’,实际通过NRF24L01传输的是’3ABC’,接收端实际处理是应根据第0字节中的数来判断收到的数据包长度。

测试:使用stm32连续发送’3BCDEF’的字符串,则可在PC端的串口助手中收到’BCD’的字符串

5. 结论

  1. 通信测试时需要确保通信两端的NRF24L01参数设置是一致的,包括地址、通信频率等。
  2. NRF24L01-串口转USB转换模块在对发送和接收数据时进行了特殊处理,在调试PC与STM32的通信时需要注意这一机制。

【STM32】STM32和PC串口的NRF24L01通信测试相关推荐

  1. STM32与中显串口屏的通信

    STM32与中显串口屏的通信 本文将简要介绍STM32单片机和武汉中显串口屏之间的通信实现过程.不过使用大彩.迪文这些公司的串口屏的同学也能参考一下,它们的通信协议好像一样. 注意:我代码用的ardu ...

  2. 基于串口助手的STM32与计算机进行串口通信

    基于串口助手的STM32与计算机进行串口通信 序 言 一. 串口通信概述 二.项目说明 三.实战过程 1)实现stm32向上位机发送字符 2)实现stm32发和收 3)Keil中针对stm32系统进行 ...

  3. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  4. STM32使用DMA发送串口数据

    1.概述 上一篇文章<STM32使用DMA接收串口数据>讲解了如何使用DMA接收数据,使用DMA外设和串口外设,使用的中断是串口空闲中断.本篇文章主要讲解使用DMA发送数据,不会讲解基础的 ...

  5. STM32工作笔记0017---ISP串口下载

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个安装也是有教程的. 串口一般来说就是PA9,PA10 stm32,一般通过串口1下载ÿ

  6. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  7. K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示

    K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 STM32 ...

  8. STM32平台的USART串口通信

    本文目的是编写stm32串口通信程序,实现stm32上电自动循环发送hello LYJ!!!,并可通过上位机控制stm32串口发送与否.通过亲自做一下USART串口通信实验,学习如何使用stm32平台 ...

  9. Matlab 与stm32单片机之间的串口通信

    Matlab 与stm32单片机之间的串口通信 在我们用stm32做信号处理时,我时常需要用到Matlab对我们采集的数据进行分析,拟合.按照传统的方法,我们一般都会先将数据通过串口助手打印出来,再导 ...

最新文章

  1. hdu1025 Constructing Roads In JGShining#39;s Kingdom(二分+dp)
  2. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】
  3. 蓝书3.7 欧拉回路
  4. 洛谷p1115 最大子段和
  5. python提取部分字符串三参数_python3 字符串属性(三)
  6. 亚马逊独霸美国安云计算未来十年订单;英伟达推出首个元宇宙平台;华为云、天翼云会合并吗?...
  7. IDEA:AbstractMethodError: Receiver class org.jetbrains.plugins.scala ScTraitImpl not define or inher
  8. python无限循环语句的代码_如何在Python中实现非阻塞无限循环
  9. python 窗口键 键位码_滚轮键按一下 这些功能超方便
  10. 建立一个端口为8189的服务器,它无限期等待直到有客户连接这个端口。若客户在网上发送正确的请求连接了这个端口,则服务器与客户之间就建立了一个可靠的连接。
  11. linux pae内核安装,CentOS6.9 32位 编译无 pae 内核
  12. Python源码学习(四)
  13. 07Spring Boot配置绑定
  14. 使用ESP8266驱动TFT显示屏
  15. shell脚本实操学习之流程控制语句
  16. 访问对象存储资源下载变成预览
  17. 百度闪电算法实时解读
  18. Android代码中实现WAP方式联网
  19. 昆仑通态人机界面与单片机通信实战教程一:工程界面的设计
  20. Java 虚拟机之HotSpot简介

热门文章

  1. 电力系统自动装置课程设计——发电机励磁系统的数学模型及PID控制仿真
  2. Android开源项目大全 - 视图View类
  3. RobotFramework环境配置二十:数据驱动(Get Sheet Values From Excel)
  4. Go | 一分钟掌握Go | 10 - 反射
  5. python数据驱动库_python webdriver测试框架--数据驱动DB驱动
  6. Organ at Risk Segmentation for Head and Neck Cancer using Stratified Learning and Neural Architecture
  7. 《软件需求工程(第二版)》毋国庆 梁正平
  8. 用pandas中的Series对字典中数字进行排序并且输出key和value的值
  9. 中国仅7张互联网电视牌照
  10. 随机密码生成(由26个字母大小写和9个数字组成的列表中随机生成10个8位密码)