【STM32】STM32和PC串口的NRF24L01通信测试

使用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模块。另外可手动进行引脚匹配。
NRF24L01

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命令来修改。
AT修改命令

4. 测试结果

4.1PC与PC通信

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

PC连接两个NRF24L01
串口发送与显示

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的通信时需要注意这一机制。
  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在STM32CubeIDE中使用nRF24L01模块进行通信,您可以按照以下步骤进行操作: 1. 首先,确保您已正确连接nRF24L01模块到STM32微控制器。通常情况下,您需要连接SPI接口的SCK、MISO、MOSI和CSN引脚,以及CE引脚和IRQ引脚。 2. 在STM32CubeIDE中创建一个新的工程,并选择适合您的STM32微控制器型号。 3. 在工程中添加适当的驱动程序来支持SPI接口。您可以使用STM32Cube库中的HAL库函数来简化与SPI外设的通信。 4. 在代码中初始化SPI接口,并配置nRF24L01模块。您需要设置SPI的速度、数据位数等,并设置nRF24L01的寄存器来配置其工作方式,例如设置频道、地址等。 5. 在发送端,在代码中设置发送数据包,并使用SPI接口将数据写入nRF24L01的发送缓冲区。您可以使用HAL库函数来实现SPI的发送操作。 6. 在接收端,在代码中配置nRF24L01为接收模式,并使用SPI接口读取nRF24L01的接收缓冲区中的数据。您可以使用HAL库函数来实现SPI的接收操作。 7. 使用适当的输出方式处理接收到的数据。您可以选择将数据通过串口输出、LCD显示或其他方式进行处理和显示。 请注意,以上步骤只是一个基本的指导,具体实现可能因所选的STM32微控制器型号、nRF24L01模块的型号和编程风格而有所不同。您可能需要参考nRF24L01STM32的相关文档和例程来获取更详细的信息和代码示例。同时,您还需要了解nRF24L01通信协议和寄存器设置,以便正确配置和操作该模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值