代码是原子哥的代码;mpu_dmp_init() DMP初始化失败 我查代买发现是
res=dmp_load_motion_driver_firmware(); //加载固件库
if(res)return 4; 实际返回4 说明加载失败 继续看发现
if (memcmp(firmware+ii, cur, this_write))
return -2; 是这个函数返回了-2 说以导致失败 这个函数 执行的是汇编 看不懂...
请问这是为什么?怎么解决呢?
首先可以确定的是我的小车原装代码是可以实现的 所以排除硬件问题
MPU_Init(); //初始化MPU6050 这可以初始化 说明IIC通行也没问题
在初始化前我没开任何中断
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
没太听懂楼主什么意思 如果你要打印出来陀螺仪原始数据相应的忘记那个.c了 好像是mpu6050.c就有u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz)等函数 直接调用加上你想读取的参数就可以读出来原始数据 如果你要读DMP融合后的pitch roll yaw 的角度 就直接调用inv_mpu.c中的u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)函数就可以读取 IIC如果要变一定要改全 不然肯定会失败
.h里面的
//IO方向设置
#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(10) //SCL
#define MPU_IIC_SDA PBout(11) //SDA
#define MPU_READ_SDA PBin(11) //输入SDA
.c里面的这个:
//初始化IIC
void MPU_IIC_Init(void)
{
RCC->APB2ENR|=1<<3; //先使能外设IO PORTB时钟
GPIOB->CRH&=0XFFFF00FF; //PB10/11 推挽输出
GPIOB->CRH|=0X00003300;
GPIOB->ODR|=3<<10; //PB10,11 输出高
}
一周热门 更多>