cubemx配置软件iic,读取mpu6050数据(附mpu6050初始化代码)

npu6050初始化代码链接:https://pan.baidu.com/s/1v0-cd5EL4zLfq9L1ZNiJ7g?pwd=xa5r 
提取码:xa5r

iic通信在硬件资源不足的情况下,可以用软件iic来代替。

iic通信靠两条线,一条时钟线,输出方波,所以将引脚配置为推挽输出output push pull,这里选用的是pb4(任意一个gpio都可)

另一条数据线,这条线有接收,有发送,配置为开漏输出out open drain,mpu6050是自带上拉电阻的,上拉电阻就不用我们操心了。

配置完成

接下来是软件驱动部分

将这些初始化的.c文件都放入魔法棒到的编译部分,给编译器指个路,在哪里找他

再将这些文件的.h文件包含进去,iic软件部分要修改的地方只有一处,再文件最上方,改一下你定义的引脚就可以,不需要在主函数里面再初始化了,因为刚才cubemx配置的时候,gpio已经被初始化,这段代码的可移植性非常高,值得借鉴。 

iic接口初始化完成,接下来就是初始化mpu6050了,调用MPU_int(),唤醒mpu6050

uint8_t MPU_Init(void)
{
    uint8_t res;

    MPU_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(50);						//设置采样率50Hz
    MPU_Write_Byte(MPU_INT_EN_REG,0X00);	//关闭所有中断
    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(50);						//设置采样率为50Hz
    } else return 1;
    return 0;
}

接下来是初始化mpu6050内部的数据处理部分即dmp,调用mpu_dmp_init();mpu6050有这个功能我觉得十分的高级,既给单片机减轻了工作量,又方便我们使用,而且mpu6050的精度和可靠性都很高,很多航模用他进行姿态检测。还很便宜,几块钱一片

DMP就是MPU6050内部的运动引擎,全称Digital Motion Processor,直接输出四元数,可以减轻外围微处理器的工作负担且避免了繁琐的滤波和数据融合。

初始化完就可以调用mpu_dmp_get_data(float *pitch,float *roll,float *yaw);来获取处理好的数据了,三个参量pitch是围绕X轴旋转,也叫做俯仰角。 yaw是围绕Y轴旋转,也叫偏航角。 roll是围绕Z轴旋转,也叫翻滚角,注意他们都是浮点数,不要设置为整形int,设置为float

接下来就是显示了,如果你的显示和我一样只能显示字符串,不能显示浮点数,那就用spritf((char*)buf,“%.2f”,pitch)来将pitch转化为保留两位小数的浮点数,放入定义的缓存数组buf,再显示就好了。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值