/* ********************************************************************************************************* * 函 数 名: bsp_InitMPU6050 * 功能说明: 初始化MPU-6050 * 形 参: 无 * 返 回 值: 1 表示正常, 0 表示不正常 ********************************************************************************************************* */ void bsp_InitMPU6050(void) { MPU6050_WriteByte(PWR_MGMT_1, 0x00); //解除休眠状态 MPU6050_WriteByte(SMPLRT_DIV, 0x07); MPU6050_WriteByte(CONFIG, 0x06); MPU6050_WriteByte(GYRO_CONFIG, 0xE8); MPU6050_WriteByte(ACCEL_CONFIG, 0x01); }
/**************************实现函数******************************************** *函数原型: void MPU6050_setI2CBypassEnabled(uint8_t enabled) *功 能: 设置 MPU6050 是否为AUX I2C线的主机 *******************************************************************************/ void MPU6050_setI2CBypassEnabled(void) { uint8_t data = 0; data = MPU6050_ReadByte(MPU6050_Addr,MPU6050_RA_INT_PIN_CFG); data = data | 0X02; MPU6050_WriteByte(MPU6050_Addr,MPU6050_RA_USER_CTRL,data); }
/**************************实现函数******************************************** *函数原型: void MPU6050_setI2CMasterModeEnabled(uint8_t enabled) *功 能: 设置 MPU6050 是否为AUX I2C线的主机 *******************************************************************************/ void MPU6050_setI2CMasterModeEnabled(void) { uint8_t data = 0; data = MPU6050_ReadByte(MPU6050_Addr,MPU6050_RA_USER_CTRL); data = data & 0XDF; MPU6050_WriteByte(MPU6050_Addr,MPU6050_RA_USER_CTRL,data); }
/****SCL PC12 SDA PC11*****/ void MPU6050_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /**************大尺寸开发板姿态传感器代码****************/ #ifdef USE_BIG_SIZE_BOARD RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //PC12 SCL GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_12); //PC11 SDA GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_11); #endif /**************小尺寸开发板姿态传感器代码****************/ #ifdef USE_LITTLE_SIZE_BOARD RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //PB15 SCL GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_15); //PB13 SDA GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_13); #endif /*************姿态模块初始化*************/ //加速度计和陀螺仪都是使用1000Hz采样 MPU6050_WriteByte(MPU6050_Addr, PWR_MGMT_1, 0x00); //解除休眠状态 MPU6050_WriteByte(MPU6050_Addr, SMPLRT_DIV, 0x00); //SMPLRT_DIV -- SMPLRT_DIV = 3, Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV) MPU6050_WriteByte(MPU6050_Addr, MPU_CONFIG, 0x03); //片内寄存器设置的低通滤波,使用带宽42Hz MPU6050_WriteByte(MPU6050_Addr, GYRO_CONFIG, 0x18); // 量程2000/s MPU6050_WriteByte(MPU6050_Addr, ACCEL_CONFIG, 0x00); // 量程2g,0x08对应4g MPU6050_setI2CMasterModeEnabled(); MPU6050_setI2CBypassEnabled(); MPU6050_WriteByte(MPU6050_Addr,INT_PIN_CFG, 0x42); //使能旁路I2C MPU6050_WriteByte(MPU6050_Addr,USER_CTRL, 0x40); //使能旁路I2C }