OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 196|回复: 2

如何用正点原子的串口显示MPU6050的传感器数据,我搞了好久一开始是无符号数,现在是乱码了

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2024-11-12
在线时间
1 小时
发表于 2025-11-26 21:11:07 | 显示全部楼层 |阅读模式
1金钱
图片是我编的陀螺仪传数据的代码,请问有啥问题吗
int16_t   accelX, accelY, accelZ;    // 存储原始加速度数据(16位有符号整数)
char       txBuffera[64];              // 发送缓冲区(格式化为字符串),足够容纳3个int16_t转字符串+分隔符+结束符

int16_t   gyroX, gyroY, gyroZ;       // 存储原始陀螺仪数据(16位有符号整数)
char       txBufferg[64];              // 发送缓冲区(格式化为字符串),足够容纳3个int16_t转字符串+分隔符+结束符        


void MPU6050_R_Accel(void)      //定期读取MPU6050数据
{
    uint8_t rawData1[6] , i = 0;  // 存储6字节原始数据(X/Y/Z各2字节)

    // 从MPU6050加速度寄存器地址读取数据
    for(i = 0; i < 6; i++)
    {
        rawData1[i] = MPU6050_Read(ACCEL_XOUT_H + i);
    }

    // 组合为有符号16位整数(大端序)
    accelX = (int16_t)(rawData1[0] << 8 | rawData1[1]);
    accelY = (int16_t)(rawData1[2] << 8 | rawData1[3]);
    accelZ = (int16_t)(rawData1[4] << 8 | rawData1[5]);
}
void MPU6050_Send_Accel(void)     //将加速度数据通过USART发送出去
{
    // 格式化为CSV字符串(示例:X,Y,Z\r\n)
    snprintf(txBuffera, sizeof(txBuffera), "Xa:%04x,Ya:%04x,Za:%04x\r\n", accelX, accelY, accelZ);

    // 通过USART发送字符串
    HAL_UART_Transmit(&huart1, (uint8_t*)txBuffera, strlen(txBuffera), HAL_MAX_DELAY);

回复

使用道具 举报

13

主题

3475

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8981
金钱
8981
注册时间
2020-5-11
在线时间
4550 小时
发表于 2025-11-27 15:16:51 | 显示全部楼层
accelX = (int16_t)(rawData1[0] << 8 | rawData1[1]);
估计是由于rawData1[0]是8位的,所以rawData1[0]<<8的结果也是8位,(int16_t)加错了位置,应加在rawData1[0]前。
专治疑难杂症
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2024-11-12
在线时间
1 小时
 楼主| 发表于 2025-11-29 11:01:48 | 显示全部楼层
LcwSwust 发表于 2025-11-27 15:16
accelX = (int16_t)(rawData1[0]

又调整了一下,现在串口不出乱码了,输出数据有负号但没有正号,可能默认不显示正号?
回复

使用道具 举报

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

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-12-14 05:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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