stm32f103c8t6与mpu6050模块的初见

**

最近焊了一块mpu6050,听说这东西用在平衡车,我也有打算做一个平衡车。先计划熟悉一下,因为在这个模块踩下的坑众多,忙了一两天也算能跑,但有bug.时而可以通过串口打印时而半天不出结果。将问题和代码发出来大家帮忙看看问题。
首先将正点原子代码直接拉出来,我们这里仅仅通过串口打印一下角度,所以将不需要的代码删除,由于mpu6050寄存器众多,我也不可能去一个个去了解,这里参考里其他人的代码。唯一不理解的是为什么这里需要用到温度传感器,所以我把它注释了,有知道用处的伙伴可以告诉我。

#include "sys.h"
#include "usart.h"		
#include "delay.h"	
#include "mpu6050.h"  
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h" 


 int main(void)
 { 
	float pitch,roll,yaw; 		//欧拉角
	short aacx,aacy,aacz;		//加速度传感器原始数据
	short gyrox,gyroy,gyroz;	//陀螺仪原始数据
//	short temp;					//温度	    
	uart_init(115200);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init();	    	 //延时函数初始化	  
	MPU_Init();
	while(mpu_dmp_init()!=0){ }
   
 
 	while(1)
	{

		
		while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0) { }
		 
//		temp=MPU_Get_Temperature();	//得到温度值
			MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	//得到加速度传感器数据
			MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	//得到陀螺仪数据	
			printf("roll:%d pitch:%d yaw:%d\r\n",(int)(roll*100),(int)(pitch*100),(int)(yaw*100));							
			delay_ms(500);
	}
}



同时还要修改iic定义的sdl和scl,正点原子mni版原来的代码用的是PC11和PC12,在f103板子上找个半天没有,所以将源代码定义接口修改

#define MPU_SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;
//IO操作函数	 
#define MPU_IIC_SCL    PBout(12) 		//SCL
#define MPU_IIC_SDA    PBout(11) 		//SDA	 
#define MPU_READ_SDA   PBin(11) 		//

正点原子的mini版代码非常完善,我们只需要修改很少的部分,基本上只需要将main函数里面的稍微修改一下就可以拿回来用。至此,代码修改完毕。代码中while里面函数的判断至于有用,什么大家可以继续百度,由于我也是懵懵懂懂就不给介绍了
完成代码以后连接硬件,串口无法打印hello world,一片白。网上介绍说是模块坏了,于是火速又买了一个,但是但是,在我要关闭调试窗口时,代码竟然动了…
在这里插入图片描述
跑完这三行就不动了,很迷惑。然后就是拔掉usb重插,代码重新编译下载。多次实验发现,模块在某些位置可以运行成功
在这里插入图片描述
实验到这里每一个问题都搞得我精疲力尽,但是我们怎么能停下来呢,到这里就要开始找原因了,首先换着花样的注释第一个和第三个while,毕竟程序跑不通他俩责任占一大半,但结果还是一样,有时候能跑出来欧拉角都为0的信息有时候根本打印不出来,这时候换个思路,第一第三个while后面跟着一个空括号,作用是等待dmp开始启动,我在这里打印错误信息可以知道运行情况。
在这里插入图片描述
可以看到错误显示既有错误1和错误2,说明程序在第一个while和第三个while都有问题

在这里插入图片描述
继续调整模块至某个位置,在错误2和成功初始化之间来回摆动,至此可以基本确定是硬件问题导致代码无法正常运行。
实际上在这个模块上我犯下的错误远比上述的要多,最后还是得到了一个结果,同时希望学习的小伙伴们永不放弃。最后附上百度云链接,以供大家参考
链接:https://pan.baidu.com/s/18-wUaB2TelK1MoVXwmatoA
提取码:l36k

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值