这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】mpu6050学习--from森

共1条 1/1 1 跳转至

【转载】mpu6050学习--from森

工程师
2024-08-19 21:54:04     打赏
一、MPU6050初始化 /**************************实现函数********************************************

一、MPU6050初始化

/**************************实现函数********************************************
*函数原型:        void MPU6050_initialize(void)
*功  能:     初始化     MPU6050 以进入可用状态。
*******************************************************************************/
void MPU6050_initialize(void)
{

    IICwriteByte(devAddr, MPU6050_RA_PWR_MGMT_1, 0x80); //PWR_MGMT_1 -- DEVICE_RESET 1
    delay_ms(50);
    IICwriteByte(devAddr, MPU6050_RA_SMPLRT_DIV, 0x00); //SMPLRT_DIV -- SMPLRT_DIV = 0 Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
    IICwriteByte(devAddr, MPU6050_RA_PWR_MGMT_1, 0x03); //PWR_MGMT_1 -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
    IICwriteByte(devAddr, MPU6050_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 0 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_PIN_CFG -- INT_LEVEL_HIGH, INT_OPEN_DIS, LATCH_INT_DIS, INT_RD_CLEAR_DIS, FSYNC_INT_LEVEL_HIGH, FSYNC_INT_DIS, I2C_BYPASS_EN, CLOCK_DIS
    IICwriteByte(devAddr, MPU6050_RA_CONFIG, MPU6050_DLPF_BW_42); //CONFIG -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz GYRO bandwidth = 256Hz)
    MPU6050_setFullScaleGyroRange(MPU6050_GYRO_FS_2000);
    // Accel scale 8g (4096 LSB/g)
    IICwriteByte(devAddr, MPU6050_RA_ACCEL_CONFIG, 2 << 3);
    
}


初始化过程

1. 对寄存器register 107 power management 1的bit7置1复位

2. 对寄存器register 25 Sample Rate Divider,设置SMPLRT_DIV为0。(最大)

3. 对寄存器register 107 power management 1 以z轴重力计为参考系。

4. 对寄存器register 55 INT PIN/BYPASS ENABLE CONFIGURATION设置为00000010:INT脚逻辑电平为高电平,推挽输出,产生50us脉冲,读取INT_STATUS后中断清除,关闭FSYNC中断,I2C_BYPASSS_EN为1和I2C_MST_EN为0时,MCU可以直接访问I2C总线。

5. 对寄存器register 27 陀螺仪设置量程为±2000°/s

6. 对寄存器register 28 加速度计量程为±8g


2017年6月4日:为了移植DMP官方的5.1库,花了好多时间。这里对IIC的Slave地址进行总结。
网上有各种各样的地址版本,如0x68,0xD0等等。明明地址不一样,为什么他们都能用呢。

就是这里:第一个地址是b1101000,而第二个地址是b1101001。注意这是7位的二进制数,我们一般用第一个,也就是b1101000
相关的IIC信息:
所以地址需要在后面添加一位读写位,所以正确的地址应该是b1101 0000和b1101 0001。
而网上的0xD0就是b1101 0000,但是0x68却是b01101000。
所以0x68其实是7位的地址,这也就是为什么有的IIC在发送地址的时候是左移1位的。

而使用D0的地址时却是直接使用的。

来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]