int8_t MPU6050_Init( MPU_InitTypeDef *MPUx ) { uint8_t status = ERROR; uint8_t MPU6050_InitData[MPU6050_InitRegNum][2] = { {0x01, MPU6050_PWR_MGMT_1}, // Reset device {0x03, MPU6050_CONFIG}, // {0x18, MPU6050_GYRO_CONFIG}, // +-2000dps {0x08, MPU6050_ACCEL_CONFIG}, // +-4G {0x32, MPU6050_INT_PIN_CFG}, // {0x00, MPU6050_USER_CTRL} // }; // MPU6050_InitData[6][0] = MPUx->MPU_Gyr_FullScale; // MPU6500_GYRO_CONFIG // MPU6050_InitData[8][0] = MPUx->MPU_Gyr_LowPassFilter; // MPU6500_CONFIG // MPU6050_InitData[7][0] = MPUx->MPU_Acc_FullScale; // MPU6500_ACCEL_CONFIG // MPU6050_InitData[9][0] = MPUx->MPU_Acc_LowPassFilter; // MPU6500_ACCEL_CONFIG_2 for(uint8_t i = 0; i < MPU6050_InitRegNum; i++) { Delay_1ms(2); MPU6050_WriteReg(MPU6050_InitData[i][1], MPU6050_InitData[i][0]); } /* Check Device ID */ status = MPU6050_Check(); if(status != SUCCESS) return ERROR; return SUCCESS; }
/* * MPU6050_Init * 初始化MPU6050,包括初始化MPU6050所需的I2C接口以及MPU6050的寄存器 * * 参数: * 无 * * 返回值 * 无 */ void MPU6050_Init() { //初始化MPU6050 MPU6050_init_struct.I2C_I2Cx = MPU6050_I2CX; //在MPU6050.h中修改该值 MPU6050_init_struct.I2C_IntEnable = FALSE; MPU6050_init_struct.I2C_ICR = MPU6050_SCL_400KHZ; //可根据实际电路更改SCL频率 MPU6050_init_struct.I2C_SclPin = MPU6050_SCLPIN; //在MPU6050.h中修改该值 MPU6050_init_struct.I2C_SdaPin = MPU6050_SDAPIN; //在MPU6050.h中修改该值 MPU6050_init_struct.I2C_Isr = NULL; LPLD_I2C_Init(MPU6050_init_struct); LPLD_SYSTICK_DelayMs(1); MPU6050_WriteReg(PWR_MGMT_1,0x00); //解除休眠状态 MPU6050_WriteReg(SMPLRT_DIV,0x07); //陀螺仪采样率,典型值:0x07(125Hz) MPU6050_WriteReg(CONFIG,0x06); //低通滤波频率,典型值:0x06(5Hz) MPU6050_WriteReg(GYRO_CONFIG,0x18); //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) MPU6050_WriteReg(ACCEL_CONFIG,0x01); //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) LPLD_SYSTICK_DelayMs(1); }