找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 142|回复: 2
打印 上一主题 下一主题
收起左侧

求佬解惑,关于mpu6050接收数据

[复制链接]
跳转到指定楼层
楼主
问题是串口接收数据不变,均为:
temp= 36.53X= 0.00,y=0.00,z=0.00,X= 0.00,y=0.00,z=1.59,
如图:


而且只有这一个能接收数据,其他两个都不行,如下图:



设置端口属性错误:31


硬件接线为
系统板PA9、PA10接ch340模块;PB6、PB7作IIC的SCL和SDA,接连mpu6050。其他就是电源接线了

cubemx引脚设置如下图:



代码:
初始化部分
  1. void MPU6050_INIT ()
  2. {
  3.         HAL_Delay(100);
  4.         
  5.         uint8_t SendAddress = 0x68;
  6.         uint8_t SendData = 0x00; //解除休眠
  7.         HAL_I2C_Mem_Write (&hi2c1,0xD0, SendAddress, 1, &SendData, 1, 0xff) ;

  8.         SendAddress = 0x19;
  9.         SendData = 0x07; //采样率分频器
  10.         HAL_I2C_Mem_Write (&hi2c1,0xD0, SendAddress, 1, &SendData, 1,0xff);

  11.         SendAddress = 0x1A; //低通滤波器
  12.         SendData = 0x06;
  13.         HAL_I2C_Mem_Write (&hi2c1,0xD0,SendAddress, 1, &SendData, 1, 0xff);

  14.         SendAddress = 0x1B; //陀螺仪
  15.         SendData = 0x08;//±500°/s
  16.         HAL_I2C_Mem_Write (&hi2c1,0xD0, SendAddress,1, &SendData, 1,0xff);

  17.         SendAddress = 0x1C; //加速度计
  18.         SendData = 0x00;//±2g
  19.         HAL_I2C_Mem_Write(&hi2c1,0xD0, SendAddress, 1, &SendData, 1, 0xff);
  20.         
  21. }
复制代码
函数部分
  1. uint8_t MPU_DATA[14]={0};
  2.         uint8_t StartAddress=0x68;
  3.         double ACCEL_XOUT = 0.0,ACCEL_YOUT=0.0,ACCEL_ZOUT=0.0;
  4.         double GYR0_XOUT = 0.0,GYR0_YOUT = 0.0,GYR0_ZOUT = 0.0;
  5.         MPU6050_INIT();
  6.   /* USER CODE END 2 */

  7.   /* Infinite loop */
  8.   /* USER CODE BEGIN WHILE */
  9.   while (1)
  10.   {
  11.     /* USER CODE END WHILE */
  12.         HAL_I2C_Mem_Read (&hi2c1,0xD1, StartAddress, I2C_MEMADD_SIZE_8BIT,MPU_DATA, 14, 50);
  13.         float Temp = (MPU_DATA[6]<<8)|MPU_DATA[7];
  14.         if(Temp >32768) Temp-=65536;
  15.         Temp = (36.53+ Temp/340);
  16.                
  17.         short int ACCEL_XOUT1 = (( MPU_DATA[0]<<8) | MPU_DATA[1]);ACCEL_XOUT = (double)ACCEL_XOUT1/16384;
  18.         short int ACCEL_YOUT1 = (( MPU_DATA[2]<<8) | MPU_DATA[3]);ACCEL_XOUT =(double)ACCEL_YOUT1/16384;
  19.         short int ACCEL_ZOUT1 = (( MPU_DATA[4]<<8) | MPU_DATA[5]);ACCEL_ZOUT = (double)ACCEL_ZOUT1/16384;
  20.                
  21.         short int GYRO_XOUT1= ((MPU_DATA[8]<<8) | MPU_DATA[9]);GYR0_XOUT = (double)GYRO_XOUT1/65.5;
  22.         short int GYRO_YOUT1=((MPU_DATA[10]<<8) | MPU_DATA[11]);GYR0_YOUT = (double)GYRO_YOUT1/65.5;
  23.         short int GYRO_ZOUT1= ((MPU_DATA[12]<<8) | MPU_DATA[13]);GYR0_ZOUT = (double)GYRO_ZOUT1/65.5;
  24.                

  25.         printf("temp= %0.2f" ,Temp);
  26.         printf("X= %0.2f,y=%0.2f,z=%0.2f," ,ACCEL_XOUT,ACCEL_YOUT,ACCEL_ZOUT);
  27.         printf("X= %0.2f,y=%0.2f,z=%0.2f," ,GYR0_XOUT,GYR0_YOUT,GYR0_ZOUT);
  28.         printf("\r\n");
  29.         HAL_Delay(200);
  30.                
  31.   }
复制代码
听了上次问题中的大佬回答,将读写地址分别改为0xD1和0xD0
然后现象就是开头所言。

求大佬解惑:
出现这样的数据接收结果是哪里有问题?
软件?程序?硬件?接线?设置?初始化?还是一开始的理解就有问题?

折腾了快一天了,明天再看看江科大的32视频中关于mpu6050的部分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1148020 发表于 2025-4-14 18:18 | 只看该作者
您好请问解决了吗,我的mpu6050也是这个问题,跑神经网络的代码输出一直固定,现在我怀疑是不是没用电源线给stm32供电导致mpu6050测量不完全
回复

使用道具 举报

板凳
ID:1142986 发表于 2025-4-14 20:27 | 只看该作者
老黄忠 发表于 2025-4-14 18:18
您好请问解决了吗,我的mpu6050也是这个问题,跑神经网络的代码输出一直固定,现在我怀疑是不是没用电源线 ...

我问了豆包,它给出的解决是
将电源管理寄存器 1 地址改为 0x6B,而非 0x68;
将读取数据的起始寄存器地址为 0x3B(加速度计 X 高位),而非 0x68。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表