使用mpu6050中断,结果一在中断处理函数中调用函数读取陀螺仪的原始值,整个系统的delay函数就会失效,请问有人遇到过这种情况吗?这是中断初始化函数
u8 MPU_Init(void)
{
u8 res;
IIC_Init();//初始化IIC总线
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050
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(1000); //设置采样率1000Hz
MPU_Write_Byte(MPU_INT_EN_REG,0X01); //开启中断
MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭
MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO
MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效
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(1000); //设置采样率为1000Hz *****xr****:这里原来是50,修改为1000
}else return 1;
return 0;
}
这是在中断中调用的问题函数(一调用delay就失效了,但是中断外调用却没有问题)
int MPU6050_ReadData(void)
{
//读取寄存器原生数据
MPU_Get_Gyroscope(&MPU6050_Raw_Data.Gyro_X,&MPU6050_Raw_Data.Gyro_Y,&MPU6050_Raw_Data.Gyro_Z);
MPU_Get_Accelerometer(&MPU6050_Raw_Data.Accel_X,&MPU6050_Raw_Data.Accel_Y,&MPU6050_Raw_Data.Accel_Z);
//将原生数据转换为实际值,计算公式跟寄存器的配置有关
//****xr****:由于我们设置的是加速度传感器±2g,陀螺仪量程±2000dps,所以需要修改
MPU6050_Real_Data.Accel_X = (float)(MPU6050_Raw_Data.Accel_X)/16384.0;
MPU6050_Real_Data.Accel_Y = (float)(MPU6050_Raw_Data.Accel_Y)/16384.0;
MPU6050_Real_Data.Accel_Z = (float)(MPU6050_Raw_Data.Accel_Z)/16384.0;
MPU6050_Real_Data.Temp = (float)(MPU6050_Raw_Data.Temp)/340.0+36.53;
MPU6050_Real_Data.Gyro_X = (float)(MPU6050_Raw_Data.Gyro_X - gyroADC_X_offset)/16.4;
MPU6050_Real_Data.Gyro_Y = (float)(MPU6050_Raw_Data.Gyro_Y - gyroADC_Y_offset)/16.4;
MPU6050_Real_Data.Gyro_Z = (float)(MPU6050_Raw_Data.Gyro_Z - gyroADC_Z_offset)/16.4;
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>