问个问题,使用 Mpu6050时 dmp初始化失败 具体是在
res=dmp_load_motion_driver_firmware(); //加载dmp固件
if(res)return 4;
里面的
if (memcmp(firmware+ii, cur, this_write))
return -2;这里会返回-2 然后直接跳出dmp初始化函数
如果把这个memcmp地方注释掉就能过但是自检那里res=run_self_test(); //自检
if(res)return 8; 又会出错,
我已经在DMP初始化前加了__set_PRIMASK(1);中断总中断,没有效果 模块是直接插在板子上的,没有通过杜邦先连接,SDA和SCL端口分别是PD8和PD9
同时接了OLED,下面附部分代码:
int main(void)
{
u8 t;
u16 led0pwmval=0,j=600;
u8 dir=1;
delay_init(); //延时函数初始化
IIC_Init();//初始化IIC总线
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
Adc_Init(); //ADC初始化
MPU_Init(); //初始化MPU6050
OLED_Init(); //初始化OLED
TIM3_PWM_Init(900-1,0); //不分频。PWM频率=72000000/900=80Khz
TIM4_Int_Init(2-1,7200);//10Khz的计数频率,计数到10为1ms
center_Init();//初始化center
CCDIO_Init(); //初始化CCDIO
HC595_Init(); //初始化HC595
HC165IO_Init();//初始化HC165
OLED_P16x16Ch(17,0,0);//17
OLED_P16x16Ch(34,0,1);
OLED_P16x16Ch(51,0,2);
OLED_P16x16Ch(68,0,3);
OLED_P16x16Ch(85,0,4);
OLED_P16x16Ch(0,2,5);
OLED_P16x16Ch(17,2,6);
OLED_P16x16Ch(34,2,7);
OLED_P16x16Ch(51,2,8);
OLED_P16x16Ch(68,2,9);
OLED_P16x16Ch(85,2,10);
OLED_P16x16Ch(102,2,11);
OLED_CLS();//清屏
OLED_P8x16Str(30,0,"请将飞行器");
OLED_P8x16Str(24,2,"置于水平状态");
OLED_P8x16Str(30,4,"且保持静止");
__set_PRIMASK(1);
if(mpu_dmp_init())
{
OLED_P8x16Str(0,5,"MPU6050 Error");//??? -- 8x16???????ASCII?
}
else
{
OLED_P8x16Str(0,5,"RUN");
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>