OpenEdv-开源电子网

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

MPU6050数据读取问题

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2015-9-12
在线时间
0 小时
发表于 2015-10-3 22:41:47 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void SYS_INIT(void) { LED_Init(); delay_init(); Nvic_Init(); NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 Uart_Init(9600); Tim3_Init(1000); //1000=1MS,500=0.5MS MPU_Init(); // mpu_dmp_init(); delay_us(50); printf("\r\n飞控系统初始化完成...\r\n"); // LED_Flash(); } // float *pitch, *roll, *yaw; //欧拉角 int main(void) { // float pitch, roll, yaw; //欧拉角 // short aacx,aacy,aacz; //加速度传感器原始数据 // short gyrox,gyroy,gyroz; //陀螺仪原始数据 // short temp; SYS_INIT(); while(1) { // mpu_PC_Attitude(); // mpu_dmp_init(); MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据 printf("加速度: %8d %8d %8d \r\n",aacx,aacy,aacz); MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据 printf("陀螺仪: %8d %8d %8d \r\n",gyrox,gyroy,&gyroz); axh = MPU_Read_Byte(MPU_ACCEL_XOUTH_REG); axl = MPU_Read_Byte(MPU_ACCEL_XOUTL_REG); aax = axh|axl; ayh = MPU_Read_Byte(MPU_ACCEL_YOUTH_REG); ayl = MPU_Read_Byte(MPU_ACCEL_YOUTL_REG); aay = ayh|ayl; azh = MPU_Read_Byte(MPU_ACCEL_ZOUTH_REG); azl = MPU_Read_Byte(MPU_ACCEL_ZOUTL_REG); aaz =azh|azl; } }[/mw_shl_code]
这是我的主函数,这是原子哥的例程:
[mw_shl_code=c,true]//得到陀螺仪值(原始值) //gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号) //返回值:0,成功 // 其他,错误代码 u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz) { u8 buf[6],res; res=MPU_Read_Len(MPU_ADDR,MPU_GYRO_XOUTH_REG,6,buf); // res=MPU_Read_Len(MPU_ADDR,MPU_GYRO_YOUTH_REG,6,buf); if(res==0) { *gx=((u16)buf[0]<<8)|buf[1]; *gy=((u16)buf[2]<<8)|buf[3]; *gz=((u16)buf[4]<<8)|buf[5]; } return res;; } //得到加速度值(原始值) //gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号) //返回值:0,成功 // 其他,错误代码 u8 MPU_Get_Accelerometer(short *ax,short *ay,short *az) { u8 buf[6],res; res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_XOUTH_REG,6,buf); // res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_YOUTH_REG,6,buf); // res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_ZOUTH_REG,6,buf); if(res==0) { *ax = ((u16)buf[0]<<8)|buf[1]; *ay = ((u16)buf[2]<<8)|buf[3]; *az = ((u16)buf[4]<<8)|buf[5]; } return res;; }[/mw_shl_code]
从主函数里面你们可以看到我用原子哥的例程得出aacx,aacy,aacz,gyrox,gyroy,gyroz这六个值,而其他变量是我
通过直接读寄存器的结果,仿真如下:



然而问题来了,我搞了几天也搞不明白,为什么寄存器明明有值了,而原子的函数就是无法正常显示,里面I2C也是用了
原子的例程的,所以就是搞不明白问题出在哪,恳请原子哥和各路大神赐教,谢谢。。。有遇到同样问题想要交流的可以联系我QQ
3六05零25七八


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2015-9-12
在线时间
0 小时
 楼主| 发表于 2015-10-4 09:01:10 | 显示全部楼层
哈,怎么没人回复啊?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-4 09:56:57 | 显示全部楼层
接着仿真,看看问题出在哪里。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 12:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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