当前位置:首页 >> 信息与通信 >>

stm32读取mpu6050数据


//IIC 起始信号 void IIC_Start(void) { SDA_OUT(); SDA=1; delay_us(4); SCL=1; delay_us(4); SDA=0; delay_us(4); SCL=0; delay_us(4); } //产生 IIC 停止信号 昨天花了一个小时写的 mpu6050 I/0 模拟 i2c 的底层驱动你可以看看。我已经成功读出 m

pu6050。因为我 当初上当买了神州王的板子。主板硬件定义和原子的不一样,注意自己修改。 //钳住 I2C 总线,准备发送或接收数据 //拉低总线 //sda 线输出,作为输出

#define

MPU6050_Addr

0xD0

//定义器件在 IIC 总线中的从地址,根据 ALT ADDRESS 地址引脚不同

修改 //这里注意了!!!i2c 器件地址是 7bit 不是 8bit,而模拟 i2c 的用 7bit 传送因此是 0xd0 器件 A0 引脚是接地。但是对于 who am I 寄存器读出后是 0x68. bin 编码方向而已。 //**************************************** // 定义 MPU6050 内部地址 //**************************************** #define SMPLRT_DIV #define CONFIG #define GYRO_CONFIG #define ACCEL_CONFIG 5Hz) #define ACCEL_XOUT_H #define ACCEL_XOUT_L #define ACCEL_YOUT_H #define ACCEL_YOUT_L #define ACCEL_ZOUT_H #define ACCEL_ZOUT_L #define TEMP_OUT_H #define TEMP_OUT_L #define GYRO_XOUT_H #define GYRO_XOUT_L #define GYRO_YOUT_H #define GYRO_YOUT_L #define GYRO_ZOUT_H #define GYRO_ZOUT_L #define PWR_MGMT_1 #define WHO_AM_I 0x3B 0x3C 0x3D 0x3E 0x3F 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x6B 0x75 //电源管理,典型值:0x00(正常启用) //IIC 地址寄存器(默认数值 0x68,只读) 0x19 0x1A 0x1B 0x1C //陀螺仪采样率,典型值:0x07(125Hz) //低通滤波频率,典型值:0x06(5Hz) //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,

void MPU6050_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_Pin_10;

GPIO_InitStructure.GPIO_Pin =

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); } /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_Start : Master Start Simulation IIC Communication : None : None : Wheather Start

****************************************************************************** */ bool MPU6050_I2C_Start(void) { MPU6050_SDA_H; MPU6050_SCL_H; delay_us(4); if(!MPU6050_SDA_read)return FALSE; MPU6050_SDA_L; delay_us(4); if(MPU6050_SDA_read) return FALSE; MPU6050_SDA_L; delay_us(4); return TRUE; } /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_Stop : Master Stop Simulation IIC Communication : None : None : None //SDA 线为高电平则总线出错,退出 //SDA 线为低电平则总线忙,退出

****************************************************************************** */ void MPU6050_I2C_Stop(void) {

MPU6050_SCL_L; delay_us(4); MPU6050_SDA_L; delay_us(4); MPU6050_SCL_H; delay_us(4); MPU6050_SDA_H; delay_us(4); } /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_Ack : Master Send Acknowledge Single : None : None : None

****************************************************************************** */ void MPU6050_I2C_Ack(void) { MPU6050_SCL_L; delay_us(1); MPU6050_SDA_L; delay_us(1); MPU6050_SCL_H; delay_us(1); MPU6050_SCL_L; delay_us(1); } /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_NoAck : Master Send No Acknowledge Single : None : None : None

****************************************************************************** */ void MPU6050_I2C_NoAck(void) { MPU6050_SCL_L; delay_us(1); MPU6050_SDA_H; delay_us(1); MPU6050_SCL_H; delay_us(1); MPU6050_SCL_L; delay_us(1);

} /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_WaitAck : Master Reserive Slave Acknowledge Single : None : None : Wheather Reserive Slave Acknowledge Single //返回为:=1 有 ACK,=0 无 ACK

****************************************************************************** */ bool MPU6050_I2C_WaitAck(void) { MPU6050_SCL_L; delay_us(1); MPU6050_SDA_H; delay_us(1); MPU6050_SCL_H; delay_us(1); if(MPU6050_SDA_read) { MPU6050_SCL_L; delay_us(1); return FALSE; } MPU6050_SCL_L; delay_us(1); return TRUE; } /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_SendByte : Master Send a Byte to Slave : Will Send Date : None : None

****************************************************************************** */ void MPU6050_I2C_SendByte(u8 SendByte) //数据从高位到低位// { u8 i=8; while(i--) { MPU6050_SCL_L; delay_us(1); if(SendByte&0x80) MPU6050_SDA_H; else MPU6050_SDA_L;

SendByte<<=1; delay_us(1); MPU6050_SCL_H; delay_us(1); } MPU6050_SCL_L; } /******************************************************************************* * Function Name * Description * Input * Output * Return : I2C_RadeByte : Master Reserive a Byte From Slave : None : None : Date From Slave //数据从高位到低位//

****************************************************************************** */ unsigned char MPU6050_I2C_RadeByte(void) { u8 i=8; u8 ReceiveByte=0; MPU6050_SDA_H; while(i--) { ReceiveByte<<=1; MPU6050_SCL_L; delay_us(1); MPU6050_SCL_H; delay_us(1); if(MPU6050_SDA_read) { ReceiveByte|=0x01; } } MPU6050_SCL_L; return ReceiveByte; } mpu6050 api //初始化 MPU6050,根据需要请参考 pdf 进行修改************************ void Init_MPU6050(void) { Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00); Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07); Single_Write(MPU6050_Addr,CONFIG,0x03); =125hz // // //输出采样率=1khz/1+7(smpl——div)

Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x00); Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x00 ); }

//±250° //

//单字节写入******************************************* bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data) //void { if(!MPU6050_I2C_Start())return FALSE; MPU6050_I2C_SendByte(SlaveAddress); //发送设备地址+写信号//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//设置高起始地址+器件地址 if(!MPU6050_I2C_WaitAck()){MPU6050_I2C_Stop(); return FALSE;} MPU6050_I2C_SendByte(REG_Address ); MPU6050_I2C_WaitAck(); MPU6050_I2C_SendByte(REG_data); MPU6050_I2C_WaitAck(); MPU6050_I2C_Stop(); delay_ms(5); return TRUE; } //单字节读取***************************************** unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address) { unsigned char REG_data; if(!MPU6050_I2C_Start())return FALSE; MPU6050_I2C_SendByte(SlaveAddress); //I2C_SendByte(((REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);//设置高起始地址+器件地址 if(!MPU6050_I2C_WaitAck()){MPU6050_I2C_Stop(); return FALSE;} MPU6050_I2C_SendByte((u8) REG_Address); MPU6050_I2C_WaitAck(); MPU6050_I2C_Start(); MPU6050_I2C_SendByte(SlaveAddress+1); MPU6050_I2C_WaitAck(); REG_data= MPU6050_I2C_RadeByte(); MPU6050_I2C_NoAck(); MPU6050_I2C_Stop(); //return TRUE; return REG_data; }//检查 MPU6050 是否正常 //对于 6050 检查 who am I 寄存器 //返回 1:检测失败 //设置低起始地址 //设置低起始地址

//返回 0:检测成功 u8 MPU6050_Check(void) { u8 temp; temp=Single_Read(MPU6050_Addr,WHO_AM_I); if(temp==0X68)return 0; else return 1; }


相关文章:
基于MPU6050的INS惯性导航和实时姿态检测系统
另外, AD0 接的 GND,所以 MPU6050 的器件地址是:0X68。 5.2.3 初始化操作 在使用 STM32F4 读取 MPU6050 的加速度和角度传感器数据之前, 需要做以 下...
stm32通过硬件i2c通信的程序
stm32通过硬件i2c通信的程序_计算机软件及应用_IT/计算机_专业资料。MPU6050 ...2)读寄存器 因为 加速度值和角速度值都在寄存器里,所以必须读它才能获得数据。...
基于STM32的IMU摄像机设计与实现
基于STM32的IMU摄像机设计与实现_计算机硬件及网络_IT/计算机_专业资料。cortex-...通过处理器读取 MPU6050 的测量数据 然后通过串口输出,该模块内部自带电压稳定...
基于stm32的四轴飞行器——开题报告_图文
基于stm32的四轴飞行器——开题报告_信息与通信_工程科技_专业资料。研究内容:以STM32F103和6轴加速度传感器MPU6050为核心芯片加之高速马达及驱动电路制作一个四轴...
MPU6050 四元数 欧拉角 程序
MPU6050 四元数 欧拉角 程序_电子/电路_工程科技_专业资料。好使51 stm32程序...MPU6050卡尔曼 4页 免费 MPU6050数据分析与滤波 9页 1下载券 MPU-6000.6050...
基于STM32的姿态测量系统设计_图文
系统以 STM32F103C8T6 为主控制器,通过 I2C 总线分别采集惯性测 量单元 MPU6050 和数字罗盘 HMC5883L 的测量数据,利用数据融合算法解算无人机当前姿 态。对于 ...
MPU6050+HMC5883驱动程序
读取到得数据分拆,放入相应寄存器,更新 MPU6050_Last ***..."stm32f10x.h" #define true 1 #define false 0 #define MPU6050_READRATE #define MPU6050_READ...
单片机控制单轴双轮自动平衡小车设计开题报告_图文
3 主要研究内容: 小车的硬件设计:设计最终使用 STM32F103C8T6,读取 mpu6050数据时通过 IIC 接口,获得小车的姿态,接下来的过程是主控芯片通过 PID 控制给电机...
STM32的四轴飞行器_图文
远距通信 接收机 STM32F407 MPU6050 遥控器 电调 1,2,3,4 远 云台舵机 ...下图是软件流程: 系统初始化 4ms定时等待否 是否到达定时 是 读取传感器 数据 ...
基于STM32的四旋翼飞行器设计
STM32F103ZET6 无线通信:NRF24L01 传感器:MPU6050 六轴传感器 遥控主芯片:STM...器件独特的硬件功能,它能够直接从传感 器读出计算好的四元数的数据,获取设备的...
更多相关标签:
mpu6050读取数据 | 怎样读取mpu6050数据 | stm32 mpu6050 | stm32 mpu6050程序 | mpu6050 stm32例程 | stm32 mpu6050 dmp | mpu6050 dmp移植stm32 | stm32 mpu6050 1602 |