1.IIC初始化
/*SCL_PIN SDA_PIN I2C2_GPIO为自定义*/
void MPU_IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStrucSUCCESS;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStrucSUCCESS.GPIO_Pin = SCL_PIN | SDA_PIN;
GPIO_InitStrucSUCCESS.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStrucSUCCESS.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(I2C2_GPIO, &GPIO_InitStrucSUCCESS);
}
2.MPU6050初始化
(1)参考MPU6050寄存器映射
首先做到为MPU6050复位,将PWR_MGMT_1寄存器Bit3置1:复位
(2)延迟100ms
(3)激活(复位后激活)
与(1)相同,PWR_MGMT_1寄存器,Bit3置为0
(4)设置采样频率,目标值为200Hz,每5ms采样一次加速度计和陀螺仪的三轴的值
在这个寄存器中,我们只需设置Bit0 - Bit7 ,假设为x
1000 Hz/(SMPLRT_DIV+1)=200Hz SMPLRT_DIV=0x04
(SMPLRT_DIV+1)得5
x就是SMPLRT_DIV,就是 0x04 = 4;
200Hz为目标值,1000Hz是基准值
(5)所谓的三轴加速度计陀螺仪就是一个加速度计和一个陀螺仪,
使用前要进行量程的设置
1)加速度量程设置
在此寄存器中,Bit3和Bit4决定
本次设置为4g,(g为重力加速度)这意味着加速度计可以测量的加速度范围是从-4g到+4g。所以Bit4 = 0;Bit3 = 1;
2)加速度量程设置,同理设置为+-2000°/s(一秒转2000度),设置位是Bit3 ,Bit4
总代码
/*初始化*/
void App_MPU6050_Init(void)
{
/*I2C初始化*/
MPU_IIC_Init();
/*MPU6050初始化*/
uint8_t date = SUCCESS; //SUCCESS from stm32f10x.h
do
{
/*设备复位*/
date = IIC_Write_One_Byte(MPU6050_ADDRESS, PWR_MGMT_1, 0x80);
osDelay(100);
/*唤醒*/
date = IIC_Write_One_Byte(MPU6050_ADDRESS, PWR_MGMT_1, 0x00);
/*设置传感器采样频率 为 250 Hz*/
date += IIC_Write_One_Byte(MPU6050_ADDRESS, SMPLRT_DIV, 0x03); // 1000 Hz/(SMPLRT_DIV+1)=250Hz SMPLRT_DIV=0x03
/*将加速度计的量程 设置为 4g*/
date += IIC_Write_One_Byte(MPU6050_ADDRESS, ACCEL_CONFIG, 0x08);//+-4g 但是参考代码是0x09
/*设置陀螺仪的量程 +-2000°/s*/
date += IIC_Write_One_Byte(MPU6050_ADDRESS, GYRO_CONFIG, 0x18);//+-2000°/s
}while(date != SUCCESS);
}