刚刚接触MPU6050,使用STM32F103C8T6驱动MPU6050,需要判断做收拾动作,但是还要省电,所以,我想到的是利用MPU6050的中断来唤醒STM32的待机模式,问题来了,刚刚玩MPU6050不了解很多东西,STM32待机模式进入后,MPU6050可以唤醒,但是MPU6050没有动,就自动唤醒了,刚进入待机模式就唤醒了,起不到省电作用,所以在此求助一些各位大神,朋友们,帮帮忙,MPU6050要怎么样设置,这些相应的参数。
当前我的设置是:
MPU_IIC_Init();//初始化IIC总线
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050
MPU_delay_ms(100);
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //唤醒MPU6050
MPU_Set_Gyro_Fsr(3); //陀螺仪传感器,±2000dps
MPU_Set_Accel_Fsr(0); //加速度传感器,±2g
MPU_Set_Rate(50); //设置采样率50Hz
MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭
// MPU_Write_Byte(MPU_INT_EN_REG,0X00); //关闭所有中断
// MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO
// MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效
// MPU_Write_Byte(MPU_INT_EN_REG,0X40); //打开运动中断 寄存器0X38
MPU_Write_Byte(MPU_INT_EN_REG,0X80); //打开自由落体中断 寄存器0X38
MPU_Write_Byte(MPU_INTBP_CFG_REG,0X10); /* 中断信号为高电平,推挽输出,直到有读取操作才消失 寄存器0X37 */
// MPU_Write_Byte(MPU_MOTION_DET_REG,0X01); // 运动阈值 寄存器0X1F
MPU_Write_Byte(MPU_MOTION_DET_DUR,0Xff); // 自由落体阈值 寄存器0X1F
MPU_Write_Byte(MPU_MOT_DUR,0X14); //检测时间20ms 单位1ms 寄存器0X20
MPU_Write_Byte(MPU_MDETECT_CTRL_REG,0XC8); //运动检测控制、加速度计上电延时200ms。 单位1ms 寄存器0X69
res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
if(res==MPU_ADDR)//器件ID正确
{
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //设置CLKSEL,PLL X轴为参考
MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00); //加速度与陀螺仪都工作
MPU_Set_Rate(50); //设置采样率为50Hz
// MPU_Set_Rate(100); //设置采样率为100Hz
}
实现不了设定的阈值来唤醒STM32 |