NRF24L01模块传输MPU6050数据,接收端数据一直为0问题记录

发布时间:2024年01月24日

问题描述:

一、发射端

1、正确配置NRF模块,以及测试过能够正常通信,在发射端的发射线程中进行了如下操作

在这里插入图片描述

2、这里是获取了陀螺仪的x轴数据,将其而分为两个8位的数据存入发送缓冲区中。因为一个陀螺仪x轴数据是16位的,所以对其进行了拆分,这里只获取gyro的x轴数据进行发送,目的是进行测试。

在这里插入图片描述

3、这个是发送函数,只要把发送缓冲区的地址作为参数传入就可以发送了。

在这里插入图片描述

二、接收端

1、接收端的NRF24L01模块也正确配置后,在接收线程中进行如下操作

在这里插入图片描述

2、读取NRF传输过来的数据,存到接收BUF中,然后打印出来,查看

在这里插入图片描述

三、进行测试(发现问题)

1、此时发射端跟接收端都处于上电状态接收端接了串口到电脑进行数据打印,发射端接了下载器进行代码修改下载

在这里插入图片描述

2、此时接收端打印的数据是正确的,我扰动飞机(也就是发送端),它的陀螺仪数据发生变化,而当我不动飞机,这两个数据最终会变为0,这是陀螺仪的gyro数据,所以目前是正常的。

在这里插入图片描述

3、接下来,我把飞机断电再重新上电,这时我扰动飞机,接收端接收到的数据始终为0,出现了问题,按理说我代码已经下进去了,我断电再重新上电应该依然能够接收到数据

在这里插入图片描述

问题解决:

1、将飞机(发送端)连接串口和下载器

在这里插入图片描述

2、点击下载程序,然后进行串口查看,发现mpu6050是能够成功初始化的

在这里插入图片描述

3、将飞机(发送端)进行断电再上电,发现串口打印输出mpu6050初始化失败,到这里已经明确为什么对发送端重新上电会导致接收端数据输出一直为0了,原来发送端重新上电后mpu6050初始化失败了,罢工了。

在这里插入图片描述

4、为什么会初始化失败呢,来看一下我的mpu6050在哪初始化,我是在一个线程里对mpu6050进行初始化的,这其实是错误的写法,因为线程一旦开始调度,就有可能被更高优先级的线程打断,我的mpu6050初始化很有可能就是初始化到一半就被其他线程打断了,导致初始化失败。

在这里插入图片描述

5、把硬件初始化统一放在一个函数中,不要在线程里面对硬件初始化,然后在上电后,在各种线程开始调度前,首先对硬件进行初始化,还有最好在上电之后,各种硬件开始初始化之前,加上一个延时函数,给我们的硬件一点反映时间

在这里插入图片描述
在这里插入图片描述

6、这时再对飞机(发送端)进行断电再重新上电,可以看到mpu6050初始化成功了。

在这里插入图片描述

7、对mpu6050的初始化位置进行修改后,再进行一次发送端和接收端的收发测试,发现能够成功通信了,数据正确了,且对飞机(发送端)断电再上电后,接收端收到的数据也正确了。

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_52251819/article/details/135618567
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。