资源简介
MPU6050的官方DMP移植到stm32f407zgt6上,本文件为已移植完成直接在.h文件里找到函数即可使用
代码片段和文件信息
#include“mpu6050.h“
#include“myiic.h“
#include“delay.h“
void MPU_Init(void)
{
//u8 res; //用来返回程序是否执行成功
IIC_Init(); //初始化IIC
MPU_WriteOne_Byte(MPU_PWR_MGMT1_REG0x80); //复位MPU6050
delay_ms(100);
MPU_WriteOne_Byte(MPU_PWR_MGMT1_REG0x00); //唤醒MPU6050
MPU_WriteOne_Byte(MPU_GYRO_CFG_REG0x18); //陀螺仪量程配置±2000dps
MPU_WriteOne_Byte(MPU_ACCEL_CFG_REG0x00); //加速度传感器±2g
MPU_WriteOne_Byte(MPU_INT_ENABLE_REG0X00); //中断使能寄存器关闭所有中断
MPU_WriteOne_Byte(MPU_USER_CTRL_REG0x00); //I2C主模式关闭
MPU_WriteOne_Byte(MPU_FIFO_EN_REG0x00); //FIFO关闭
MPU_Set_SRD(100); //设置陀螺仪采样率分频寄存器100Hz自动设置DLPF
MPU_WriteOne_Byte(MPU_PWR_MGMT1_REG0x01); //设置CLKSELPLL X轴为参考
MPU_WriteOne_Byte(MPU_PWR_MGMT2_REG0x00); //使能加速度与陀螺仪,关闭唤醒
}
//得到陀螺仪的原始数据(带符号)
//返回值:0设置成功
u8 MPU_Get_Gyroscope(short *gxshort *gyshort *gz)
{
u8 buf[6]; //储存XHXLYHYLZHZL的6个8位原始数据
u8 res; //用来返回程序是否执行成功
res=MPU_ConRead_Len(MPU_ADDRMPU_GYRO_XOUTH_REG6buf);
if(res==0)
{
*gx=( (u16)buf[0]<<8 )|( (u16)buf[1] );
*gy=( (u16)buf[2]<<8 )|( (u16)buf[3] );
*gz=( (u16)buf[4]<<8 )|( (u16)buf[5] );
}
return res;
}
//得到加速度的原始数据(带符号)
//返回值:0设置成功
u8 MPU_Get_Accelerometer(short *axshort *ayshort *az)
{
u8 buf[6]; //储存XHXLYHYLZHZL的6个8位原始数据
u8 res; //用来返回程序是否执行成功
res=MPU_ConRead_Len(MPU_ADDRMPU_ACCEL_XOUTH_REG6buf);
if(res==0)
{
*ax=( (u16)buf[0]<<8 )|( (u16)buf[1] );
*ay=( (u16)buf[2]<<8 )|( (u16)buf[3] );
*az=( (u16)buf[4]<<8 )|( (u16)buf[5] );
}
return res;
}
//设置陀螺仪采样率分频寄存器
//DLPF被禁用时(DLPF_CFG=0或7)陀螺仪输出速率=8kHz;使能时1kHz
//因为使能了DLPF所以Fs=1000Hz又1000/2^8=4
//采样频率rate=4~1000Hz
//返回值:0设置成功
u8 MPU_Set_SRD(u16 rate)
{
u8 data;
if(rate>1000) rate=1000;
if(rate<4) rate=4;
data=1000/rate-1;
MPU_WriteOne_Byte(MPU_SMPRT_DIV_REGdata); //设置采样频率分频器
return MPU_Set_DLPF(rate/2); //自动设置DLPF为采样率的一半
}
//设置数字低通滤波器
//dlpf:数字低通滤波频率(Hz)
//返回值:0设置成功
u8 MPU_Set_DLPF(u16 dlpf) //必须要用u16因为rate/2的最大值为500
{
u8 data=0; //用来设置DLPF_CFG
if(dlpf>188) data=1;
else if(dlpf>98) data=2;
else if(dlpf>42) data=3;
else if(dlpf>20) data=4;
else if(dlpf>10) data=5;
else data=6;
return MPU_WriteOne_Byte(MPU_CONFIG_REGdata); //设置数字低通滤波器
}
//得到温度值
//返回值:温度值(扩大了100倍)
short MPU_Get_Temperature(void)
{
u8 buf[2];
short raw;
float temp;
MPU_ConRead_Len(MPU_ADDRMPU_TEMP_OUTH_REG2buf);
raw=((u16)buf[0]<<8)|buf[1];
temp=36.53+((double)raw)/340;
return temp*100;;
}
//IIC连续写
//add:器件地址
//reg_add:寄存器地址
//len:写入长度
//buf:数据区
//返回值:0正常
u8 MPU_ConWrite_Len(u8 addu8 reg_addu8 lenu8 *buf) //连续写
{
u8 i;
IIC_Start();
IIC_Send_Byte( (add<<1)|0 ); ////发送器件地址+0写命令
if(IIC_Wait_Ack()) //等待ACK
{
IIC_Stop();
return 1;
}
IIC_Send_Byte(reg_add);//写寄存器地址
if(IIC_Wait_Ack()) //等待ACK
{
IIC_Stop();
return 1;
}
for(i=0;i {
IIC_Send_Byte(buf[i]); //发送数据
if(IIC_Wait_Ack()) //等待ACK
{
IIC_S
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-04-26 22:01 MPU6050\
目录 0 2018-04-26 22:01 MPU6050\eMPL\
文件 19342 2012-12-14 11:16 MPU6050\eMPL\dmpKey.h
文件 6765 2012-12-14 11:16 MPU6050\eMPL\dmpmap.h
文件 84352 2018-04-26 12:28 MPU6050\eMPL\inv_mpu.c
文件 4662 2018-04-15 20:00 MPU6050\eMPL\inv_mpu.h
文件 58396 2018-04-15 20:17 MPU6050\eMPL\inv_mpu_dmp_motion_driver.c
文件 3538 2012-12-14 11:16 MPU6050\eMPL\inv_mpu_dmp_motion_driver.h
文件 5553 2018-04-21 18:51 MPU6050\mpu6050.c
文件 2321 2018-04-21 18:43 MPU6050\mpu6050.h
文件 8672 2018-04-18 12:27 MPU6050\mpu_dmp_use.c
文件 156 2018-04-17 18:50 MPU6050\mpu_dmp_use.h
相关资源
- 陀螺仪MPU6050驱动
- 基于改进EMD算法的跳频信号参数估计
- emd分解端点效应论文及改进程序
- bemd处理图像进行图像分解操作.zip
- PROE外挂SMY_EMD
- 四轴飞控源码 PID参考apm 采用了dmp自带
- EEMD的快速实现FEEMD
- 台湾中央大学的HHT代码,附带和讲解
- STM32F1单片机MPU6050加速度计陀螺仪驱动
- STM8L_MPU6500_DMP_震动唤醒
- rcada_eemd--快速eemd算法
- 论文研究 - 基于EMD和BP_AdaBoost神经网络
- emd分解成多个imf分量,通过判断以后
- 两轮平衡车源程序,方能仪器,自平
- 基于stm32的六轴传感器驱动工程文件
- MPU6050数据发送到匿名上位机2.4版本的
- STM32 MPU6050 载人平衡车资料
- mpu6050\\mpu9150\\ms5611电路图可直接使用
- MPU6050DMP自检和零偏校准
- mpu6050中文手册
- 网上能下到的最好的2种HHT,附加EMD工
- 基于STM32的DMP方式读取欧拉角
- STM32F103_FREERTOS_MPU6050DMP_USART_Timer输入捕
- 基于stm32的四旋翼飞控程序
- STM32 MPU6050 dmp读取四元数程序
- stm32 mpu6050 DMP 成功
- UCGUI 3.90a版源码MEMDEV
- 基于STM32F103C8T6及NRF24L01的摔倒检测+
- stm32 mpu6050 串口输出
- STM32 MPU6050-DMP
评论
共有 条评论