先点赞,再看博客,顺便点个关注鼓励一下。
如果文章看完,觉得不错的话可以点个收藏,日后不迷路。
此程序是博主几年前写的,有读者问,就整理发出来了;IIC 驱动和源代码文件可以去我的博客资源免费下载。
有的程序语句没有注释,不懂或有问题的可以在下面留言。
准备工作:
/******************************************************************\
** 本程序只供学习使用,未经作者许可,不得用于其它任何用途 **
** **
** 硬件平台:STM32F407VGT6 **
** 开发环境:MDK-ARM( 5.14 ) **
** **
** 作 者:Brendon Tan **
** 完成日期:2016.11.30 **
** **
** 文件名称:mpu6050.c **
** 文件说明:MPU6050 读取驱动 **
** **
** Copyright(C) 2016-2026,@Brendon_Tan **
\******************************************************************/
#include "mpu6050.h"
unsigned char MPU6050_Buffer[14];
/* MPU6050 Init Configuration */
void MPU6050_Init(void)
{
IIC_Init();
MPU6050_Set_DeviceReset(Enable); // RST
delay_ms(100);
MPU6050_Set_DeviceReset(Disable);
MPU6050_Set_SleepMode(Disable); // WAKE
delay_ms(10);
MPU6050_Set_Clock(MPU6050_CLOCK_PLL_ZGYRO); // CLOCK
delay_ms(10);
MPU6050_Set_GyroRange(MPU6050_GYRO_FS_2000); // ±2000°/s
delay_ms(10);
MPU6050_Set_AccelRange(MPU6050_ACCEL_FS_4); // ±4G
delay_ms(10);
MPU6050_Set_DLPF(MPU6050_DLPF_BW_42); // 42Hz DLPF
delay_ms(10);
MPU6050_Set_SmplrtDiv(1); // 1000Hz
delay_ms(10);
MPU6050_Write_REG(MPU6050_PWR_MGMT_2_REG, 0X00);//GYRO and ACCEL Output
delay_ms(10);
MPU6050_Set_IICMasterMode(Disable); // DISEN IIC Master Mode
delay_ms(10);
MPU6050_Set_IICBypassMode(Enable); // MCU could Ask IIC
delay_ms(10);
}
/* Read Gyro and Accel Data from MPU6050 */
void MPU6050_Read(void)
{
MPU6050_Read_nData(MPU6050_ACCEL_XOUT_H_REG, MPU6050_Buffer, 14);
}
/* Write REG Data to MPU6050 */
/* reg_addr: 寄存器地址 */
/* write_data: 写入指令数据 */
void MPU6050_Write_REG(unsigned char reg_addr, unsigned char write_data)
{
IIC_Write_Data(MPU6050_ADDR, reg_addr, write_data);
}
/* Read n REG Data from MPU6050 */
/* reg_addr: 寄存器地址 */
/* *buf: 读取数据数组 */
/* num: 读取数据数量 */
void MPU6050_Read_nData(unsigned char reg_addr, unsigned char *buf, unsigned char num)
{
IIC_Read_nData(MPU6050_ADDR, reg_addr, num, &(*buf));
}
/* Write One Bit Data to MPU6050 REG Data */
/* reg_addr: 寄存器地址 */
/* bit_num: 写入位的序号(第几位) */
/* bit_data: 写入位的数据(0/1) */
void MPU6050_Write_Bit(unsigned char reg_addr, unsigned int bit_num, unsigned char bit_data)
{
IIC_Write_Bit(MPU6050_ADDR, reg_addr, bit_num, bit_data);
}
/* Write len Bit Data to MPU6050 REG Data */
/* reg_addr: 寄存器地址 */
/* bit_start: 写入位起始位的序号 */
/* len: 写入数据的长度 */
/* bit_data: 写入位的数据(0xXX) */
void MPU6050_Write_nBit(unsigned char reg_addr, unsigned char bit_start, unsigned int len, unsigned char bit_data)
{
IIC_Write_nBit(MPU6050_ADDR, reg_addr, bit_start, len, bit_data);
}
/* Set Device Reset of MPU6050 (EN / DISEN)*/
/* enabled: 0: 正常状态 */
/* 1: 复位状态(完成后置1) */
void MPU6050_Set_DeviceReset(unsigned char enabled)
{
MPU6050_Write_Bit(MPU6050_PWR_MGMT_1_REG, MPU6050_PWR_MGMT_1_DEVICE_RESET_BIT, enabled);
}
/* Set Sleep Mode of MPU6050 (EN / DISEN) */
/* enabled: 0: 解除休眠 */
/* 1: 进入休眠 */
void MPU6050_Set_SleepMode(unsigned char enabled)
{
MPU6050_Write_Bit(MPU6050_PWR_MGMT_1_REG, MPU6050_PWR_MGMT_1_SLEEP_BIT, enabled);
}
/* Set Work Clock of MPU6050 */
/* clock_source: 时钟源 */
/* MPU6050_CLOCK_INTERNAL_8M 内部8M时钟 */
/* MPU6050_CLOCK_PLL_XGYRO X轴参考PLL */
/* MPU6050_CLOCK_PLL_YGYRO Y轴参考PLL */
/* MPU6050_CLOCK_PLL_ZGYRO Z轴参考PLL */
/* MPU6050_CLOCK_PLL_EXT32K 外部32.768K */
/* MPU6050_CLOCK_PLL_EXT19M 外部19.2M */
/* MPU6050_CLOCK_KEEP_RESET 停止,复位 */
void MPU6050_Set_Clock(unsigned char clock_source)
{
MPU6050_Write_nBit(MPU6050_PWR_MGMT_1_REG, MPU6050_PWR_MGMT_1_CLKSEL_BIT, MPU6050_PWR_MGMT_1_CLKSEL_LENGTH, clock_source);
}
/* Set Smplrt Div of MPU6050 */
/* div: 分频系数(分频采样时钟) */
/* 采样时钟由DLPF BW 决定 */
void MPU6050_Set_SmplrtDiv(unsigned char div)
{
MPU6050_Write_REG(MPU6050_SAMPLE_DIV_REG, div-1);
}
/* Set Gyro Range of MPU6050 */
/* gyro_range: 陀螺仪量程 */
/* MPU6050_GYRO_FS_250 ±250°/s */
/* MPU6050_GYRO_FS_500 ±500°/s */
/* MPU6050_GYRO_FS_1000 ±1000°/s */
/* MPU6050_GYRO_FS_2000 ±2000°/s */
void MPU6050_Set_GyroRange(unsigned char gyro_range)
{
MPU6050_Write_nBit(MPU6050_GYRO_CONFIG_REG, MPU6050_GCONFIG_FS_SEL_BIT, MPU6050_GCONFIG_FS_SEL_LENGTH, gyro_range);
MPU6050_Write_nBit(MPU6050_GYRO_CONFIG_REG, MPU6050_GCONFIG_XG_ST_BIT, 3, 0x00); //不自检
}
/* Set Accel Range of MPU6050 */
/* accel_range: 加速度计量程 */
/* MPU6050_ACCEL_FS_2 ±2g */
/* MPU6050_ACCEL_FS_4 ±4g */
/* MPU6050_ACCEL_FS_8 ±8g */
/* MPU6050_ACCEL_FS_16 ±16g */
void MPU6050_Set_AccelRange(unsigned char accel_range)
{
MPU6050_Write_nBit(MPU6050_ACCEL_CONFIG_REG, MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, accel_range);
MPU6050_Write_nBit(MPU6050_ACCEL_CONFIG_REG, MPU6050_ACONFIG_XA_ST_BIT, 3, 0x00); //不自检
}
/* Set DLPF BandWidth of MPU6050 */
/* bandwidth: 频率带宽(留低滤高) */
/* 带宽 采样时钟*/
/* MPU6050_DLPF_BW_256 256Hz 8KHz */
/* MPU6050_DLPF_BW_188 188Hz 1KHz */
/* MPU6050_DLPF_BW_98 98Hz 1KHz */
/* MPU6050_DLPF_BW_42 42Hz 1KHz */
/* MPU6050_DLPF_BW_20 20Hz 1KHz */
/* MPU6050_DLPF_BW_10 10Hz 1KHz */
/* MPU6050_DLPF_BW_2 2Hz 1KHz */
void MPU6050_Set_DLPF(unsigned char dlpf_bandwidth)
{
MPU6050_Write_nBit(MPU6050_CONFIG_REG, MPU6050_CFG_DLPF_CFG_BIT, MPU6050_CFG_DLPF_CFG_LENGTH, dlpf_bandwidth);
}
/* Set IIC Master Mode of MPU6050 */
/* enabled: 0: 辅助IIC总线(从机) */
/* 1: 使能IIC主机模式 */
void MPU6050_Set_IICMasterMode(unsigned char enabled)
{
MPU6050_Write_Bit(MPU6050_USER_CTRL_REG, MPU6050_USER_CTRL_I2C_MST_EN_BIT, enabled);
}
/* Set IIC Bypass Mode of MPU6050 */
/* enabled: 0: MCU不能直接访问设备 */
/* 1: MCU可以直接访问设备 */
void MPU6050_Set_IICBypassMode(unsigned char enabled)
{
MPU6050_Write_Bit(MPU6050_INT_PIN_CFG_REG, MPU6050_INTCFG_I2C_BYPASS_EN_BIT, enabled);
}
/************************ END of the File *************************/
/******************************************************************\
** 本程序只供学习使用,未经作者许可,不得用于其它任何用途 **
** **
** 硬件平台:STM32F407VGT6 **
** 开发环境:MDK-ARM( 5.14 ) **
** **
** 作 者:Brendon Tan **
** 完成日期:2016.11.30 **
** **
** 文件名称:mpu6050.h **
** 文件说明:MPU6050 读取驱动 **
** **
** Copyright(C) 2016-2026,@Brendon_Tan **
\******************************************************************/
#ifndef _mpu6050_H
#define _mpu6050_H
#include "includes.h"
/* Define of the MPU_60X0 REG */
/* REG Data from MPU-6050 DataSheet */
/* MPU-6000 and MPU-6050 Register Map and Descriptions */
/* Revision:4.0 */
/* Release Date: 03/09/2012 */
#define MPU6050_SELF_TEST_X_REG 0X0D //自检寄存器X R/W
#define MPU6050_SELF_TEST_Y_REG 0X0E //自检寄存器Y R/W
#define MPU6050_SELF_TEST_Z_REG 0X0F //自检寄存器Z R/W
#define MPU6050_SELF_TEST_A_REG 0X10 //自检寄存器A R/W
#define MPU6050_SAMPLE_DIV_REG 0X19 //采样频率分频器 R/W
#define MPU6050_CONFIG_REG 0X1A //配置寄存器 R/W
#define MPU6050_GYRO_CONFIG_REG 0X1B //陀螺仪配置寄存器 R/W
#define MPU6050_ACCEL_CONFIG_REG 0X1C //加速度计配置寄存器 R/W
#define MPU6050_MOT_THR_REG 0X1F //运动检测阀值设置寄存器 R/W
#define MPU6050_FIFO_EN_REG 0X23 //FIFO使能寄存器 R/W
#define MPU6050_I2C_MST_CTRL_REG 0X24 //IIC主机控制寄存器 R/W
#define MPU6050_I2C_SLV0_ADDR_REG 0X25 //IIC从机0器件地址寄存器 R/W
#define MPU6050_I2C_SLV0_REG_REG 0X26 //IIC从机0数据地址寄存器 R/W
#define MPU6050_I2C_SLV0_CTRL_REG 0X27 //IIC从机0控制寄存器 R/W
#define MPU6050_I2C_SLV1_ADDR_REG 0X28 //IIC从机1器件地址寄存器 R/W
#define MPU6050_I2C_SLV1_REG_REG 0X29 //IIC从机1数据地址寄存器 R/W
#define MPU6050_I2C_SLV1_CTRL_REG 0X2A //IIC从机1控制寄存器 R/W
#define MPU6050_I2C_SLV2_ADDR_REG 0X2B //IIC从机2器件地址寄存器 R/W
#define MPU6050_I2C_SLV2_REG_REG 0X2C //IIC从机2数据地址寄存器 R/W
#define MPU6050_I2C_SLV2_CTRL_REG 0X2D //IIC从机2控制寄存器 R/W
#define MPU6050_I2C_SLV3_ADDR_REG 0X2E //IIC从机3器件地址寄存器 R/W
#define MPU6050_I2C_SLV3_REG_REG 0X2F //IIC从机3数据地址寄存器 R/W
#define MPU6050_I2C_SLV3_CTRL_REG 0X30 //IIC从机3控制寄存器 R/W
#define MPU6050_I2C_SLV4_ADDR_REG 0X31 //IIC从机4器件地址寄存器 R/W
#define MPU6050_I2C_SLV4_REG_REG 0X32 //IIC从机4数据地址寄存器 R/W
#define MPU6050_I2C_SLV4_DO_REG 0X33 //IIC从机4写数据寄存器 R/W
#define MPU6050_I2C_SLV4_CTRL_REG 0X34 //IIC从机4控制寄存器 R/W
#define MPU6050_I2C_SLV4_DI_REG 0X35 //IIC从机4读数据寄存器 R
#define MPU6050_I2C_MST_STATUS_REG 0X36 //IIC主机状态寄存器 R
#define MPU6050_INT_PIN_CFG_REG 0X37 //中断/旁路设置寄存器 R/W
#define MPU6050_INT_ENABLE_REG 0X38 //中断使能寄存器 R/W
#define MPU6050_INT_STATUS_REG 0X3A //中断状态寄存器 R
#define MPU6050_ACCEL_XOUT_H_REG 0X3B //加速度值,X轴高8位寄存器 R
#define MPU6050_ACCEL_XOUT_L_REG 0X3C //加速度值,X轴低8位寄存器 R
#define MPU6050_ACCEL_YOUT_H_REG 0X3D //加速度值,Y轴高8位寄存器 R
#define MPU6050_ACCEL_YOUT_L_REG 0X3E //加速度值,Y轴低8位寄存器 R
#define MPU6050_ACCEL_ZOUT_H_REG 0X3F //加速度值,Z轴高8位寄存器 R
#define MPU6050_ACCEL_ZOUT_L_REG 0X40 //加速度值,Z轴低8位寄存器 R
#define MPU6050_TEMP_OUT_H_REG 0X41 //温度值高8位寄存器 R
#define MPU6050_TEMP_OUT_L_REG 0X42 //温度值低8位寄存器 R
#define MPU6050_GYRO_XOUT_H_REG 0X43 //陀螺仪值,X轴高8位寄存器 R
#define MPU6050_GYRO_XOUT_L_REG 0X44 //陀螺仪值,X轴低8位寄存器 R
#define MPU6050_GYRO_YOUT_H_REG 0X45 //陀螺仪值,Y轴高8位寄存器 R
#define MPU6050_GYRO_YOUT_L_REG 0X46 //陀螺仪值,Y轴低8位寄存器 R
#define MPU6050_GYRO_ZOUT_H_REG 0X47 //陀螺仪值,Z轴高8位寄存器 R
#define MPU6050_GYRO_ZOUT_L_REG 0X48 //陀螺仪值,Z轴低8位寄存器 R
#define MPU6050_EXT_SENS_DATA_00_REG 0x49 //外部传感器数据寄存器00 R
#define MPU6050_EXT_SENS_DATA_01_REG 0x4A //外部传感器数据寄存器01 R
#define MPU6050_EXT_SENS_DATA_02_REG 0x4B //外部传感器数据寄存器02 R
#define MPU6050_EXT_SENS_DATA_03_REG 0x4C //外部传感器数据寄存器03 R
#define MPU6050_EXT_SENS_DATA_04_REG 0x4D //外部传感器数据寄存器04 R
#define MPU6050_EXT_SENS_DATA_05_REG 0x4E //外部传感器数据寄存器05 R
#define MPU6050_EXT_SENS_DATA_06_REG 0x4F //外部传感器数据寄存器06 R
#define MPU6050_EXT_SENS_DATA_07_REG 0x50 //外部传感器数据寄存器07 R
#define MPU6050_EXT_SENS_DATA_08_REG 0x51 //外部传感器数据寄存器08 R
#define MPU6050_EXT_SENS_DATA_09_REG 0x52 //外部传感器数据寄存器09 R
#define MPU6050_EXT_SENS_DATA_10_REG 0x53 //外部传感器数据寄存器10 R
#define MPU6050_EXT_SENS_DATA_11_REG 0x54 //外部传感器数据寄存器11 R
#define MPU6050_EXT_SENS_DATA_12_REG 0x55 //外部传感器数据寄存器12 R
#define MPU6050_EXT_SENS_DATA_13_REG 0x56 //外部传感器数据寄存器13 R
#define MPU6050_EXT_SENS_DATA_14_REG 0x57 //外部传感器数据寄存器14 R
#define MPU6050_EXT_SENS_DATA_15_REG 0x58 //外部传感器数据寄存器15 R
#define MPU6050_EXT_SENS_DATA_16_REG 0x59 //外部传感器数据寄存器16 R
#define MPU6050_EXT_SENS_DATA_17_REG 0x5A //外部传感器数据寄存器17 R
#define MPU6050_EXT_SENS_DATA_18_REG 0x5B //外部传感器数据寄存器18 R
#define MPU6050_EXT_SENS_DATA_19_REG 0x5C //外部传感器数据寄存器19 R
#define MPU6050_EXT_SENS_DATA_20_REG 0x5D //外部传感器数据寄存器20 R
#define MPU6050_EXT_SENS_DATA_21_REG 0x5E //外部传感器数据寄存器21 R
#define MPU6050_EXT_SENS_DATA_22_REG 0x5F //外部传感器数据寄存器22 R
#define MPU6050_EXT_SENS_DATA_23_REG 0x60 //外部传感器数据寄存器23 R
#define MPU6050_I2C_SLV0_DO_REG 0X63 //IIC从机0数据寄存器 R/W
#define MPU6050_I2C_SLV1_DO_REG 0X64 //IIC从机1数据寄存器 R/W
#define MPU6050_I2C_SLV2_DO_REG 0X65 //IIC从机2数据寄存器 R/W
#define MPU6050_I2C_SLV3_DO_REG 0X66 //IIC从机3数据寄存器 R/W
#define MPU6050_I2C_MST_DELAY_CTRL_REG 0X67 //IIC主机延时管理寄存器 R/W
#define MPU6050_SIGNAL_PATH_RESET_REG 0X68 //信号通道复位寄存器 R/W
#define MPU6050_MOT_DETECT_CTRL_REG 0X69 //运动检测控制寄存器 R/W
#define MPU6050_USER_CTRL_REG 0X6A //用户控制寄存器 R/W
#define MPU6050_PWR_MGMT_1_REG 0X6B //电源管理寄存器1 R/W
#define MPU6050_PWR_MGMT_2_REG 0X6C //电源管理寄存器2 R/W
#define MPU6050_FIFO_COUNTH_REG 0X72 //FIFO计数寄存器高八位 R/W
#define MPU6050_FIFO_COUNTL_REG 0X73 //FIFO计数寄存器低八位 R/W
#define MPU6050_FIFO_R_W_REG 0X74 //FIFO读写寄存器 R/W
#define MPU6050_WHO_AM_I_REG 0X75 //器件ID寄存器 R
/* MPU6050_PWR_MGMT_1_REG ( 0x6B ) Data Define */
#define MPU6050_PWR_MGMT_1_DEVICE_RESET_BIT 7
#define MPU6050_PWR_MGMT_1_SLEEP_BIT 6
#define MPU6050_PWR_MGMT_1_CYCLE_BIT 5
#define MPU6050_PWR_MGMT_1_TEMP_DIS_BIT 3
#define MPU6050_PWR_MGMT_1_CLKSEL_BIT 2
#define MPU6050_PWR_MGMT_1_CLKSEL_LENGTH 3
#define MPU6050_CLOCK_INTERNAL_8M 0x00
#define MPU6050_CLOCK_PLL_XGYRO 0x01
#define MPU6050_CLOCK_PLL_YGYRO 0x02
#define MPU6050_CLOCK_PLL_ZGYRO 0x03
#define MPU6050_CLOCK_PLL_EXT32K 0x04
#define MPU6050_CLOCK_PLL_EXT19M 0x05
#define MPU6050_CLOCK_KEEP_RESET 0x07
/* MPU6050_GYRO_CONFIG_REG ( 0x1B ) Data Define */
#define MPU6050_GCONFIG_XG_ST_BIT 7
#define MPU6050_GCONFIG_YG_ST_BIT 6
#define MPU6050_GCONFIG_ZG_ST_BIT 5
#define MPU6050_GCONFIG_FS_SEL_BIT 4
#define MPU6050_GCONFIG_FS_SEL_LENGTH 2
#define MPU6050_GYRO_FS_250 0x00
#define MPU6050_GYRO_FS_500 0x01
#define MPU6050_GYRO_FS_1000 0x02
#define MPU6050_GYRO_FS_2000 0x03
/* MPU6050_ACCEL_CONFIG_REG ( 0x1C ) Data Define */
#define MPU6050_ACONFIG_XA_ST_BIT 7
#define MPU6050_ACONFIG_YA_ST_BIT 6
#define MPU6050_ACONFIG_ZA_ST_BIT 5
#define MPU6050_ACONFIG_AFS_SEL_BIT 4
#define MPU6050_ACONFIG_AFS_SEL_LENGTH 2
#define MPU6050_ACCEL_FS_2 0x00
#define MPU6050_ACCEL_FS_4 0x01
#define MPU6050_ACCEL_FS_8 0x02
#define MPU6050_ACCEL_FS_16 0x03
/* MPU6050_CONFIG_REG ( 0x1A ) Data Define */
#define MPU6050_CFG_EXT_SYNC_SET_BIT 5
#define MPU6050_CFG_DLPF_CFG_BIT 2
#define MPU6050_CFG_EXT_SYNC_SET_LENGTH 3
#define MPU6050_CFG_DLPF_CFG_LENGTH 3
#define MPU6050_EXT_SYNC_DISABLED 0x00
#define MPU6050_EXT_SYNC_TEMP_OUT_L 0x01
#define MPU6050_EXT_SYNC_GYRO_XOUT_L 0x02
#define MPU6050_EXT_SYNC_GYRO_YOUT_L 0x03
#define MPU6050_EXT_SYNC_GYRO_ZOUT_L 0x04
#define MPU6050_EXT_SYNC_ACCEL_XOUT_L 0x05
#define MPU6050_EXT_SYNC_ACCEL_YOUT_L 0x06
#define MPU6050_EXT_SYNC_ACCEL_ZOUT_L 0x07
#define MPU6050_DLPF_BW_256 0x00
#define MPU6050_DLPF_BW_188 0x01
#define MPU6050_DLPF_BW_98 0x02
#define MPU6050_DLPF_BW_42 0x03
#define MPU6050_DLPF_BW_20 0x04
#define MPU6050_DLPF_BW_10 0x05
#define MPU6050_DLPF_BW_5 0x06
/* MPU6050_USER_CTRL_REG ( 0x6A ) Data Define */
#define MPU6050_USER_CTRL_FIFO_EN_BIT 6
#define MPU6050_USER_CTRL_I2C_MST_EN_BIT 5
#define MPU6050_USER_CTRL_I2C_IF_DIS_BIT 4
#define MPU6050_USER_CTRL_FIFO_RESET_BIT 2
#define MPU6050_USER_CTRL_I2C_MST_RESET_BIT 1
#define MPU6050_USER_CTRL_SIG_COND_RESET_BIT 0
/* MPU6050_INT_PIN_CFG_REG ( 0x37 ) Data Define */
#define MPU6050_INTCFG_INT_LEVEL_BIT 7
#define MPU6050_INTCFG_INT_OPEN_BIT 6
#define MPU6050_INTCFG_LATCH_INT_EN_BIT 5
#define MPU6050_INTCFG_INT_RD_CLEAR_BIT 4
#define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT 3
#define MPU6050_INTCFG_FSYNC_INT_EN_BIT 2
#define MPU6050_INTCFG_I2C_BYPASS_EN_BIT 1
#define MPU6050_INTCFG_CLKOUT_EN_BIT 0
/*********** END of Register and REG Data Bit ***********/
/* Define the Address of MPU6050 */
#define MPU6050_ADDR MPU6050_ADDRESS_AD0_LOW
#define MPU6050_ADDRESS_AD0_LOW 0x68 //AD0 Connect to GND or Floating
#define MPU6050_ADDRESS_AD0_HIGH 0x69 //AD0 Connect to VCC(3.3)
#define MPU6050_DEFAULT_ADDRESS MPU6050_ADDRESS_AD0_LOW
#define Enable 1
#define Disable 0
extern unsigned char MPU6050_Buffer[14];
void MPU6050_Init(void);
void MPU6050_Read(void);
void MPU6050_Write_REG(unsigned char reg_addr, unsigned char write_data);
void MPU6050_Read_nData(unsigned char reg_addr, unsigned char *buf, unsigned char num);
void MPU6050_Write_Bit(unsigned char reg_addr, unsigned int bit_num, unsigned char bit_data);
void MPU6050_Write_nBit(unsigned char reg_addr, unsigned char bit_start, unsigned int len, unsigned char bit_data);
void MPU6050_Set_DeviceReset(unsigned char enabled);
void MPU6050_Set_SleepMode(unsigned char enabled);
void MPU6050_Set_Clock(unsigned char clock_source);
void MPU6050_Set_SmplrtDiv(unsigned char div);
void MPU6050_Set_GyroRange(unsigned char gyro_range);
void MPU6050_Set_AccelRange(unsigned char accel_range);
void MPU6050_Set_DLPF(unsigned char dlpf_bandwidth);
void MPU6050_Set_IICMasterMode(unsigned char enabled);
void MPU6050_Set_IICBypassMode(unsigned char enabled);
#endif
/************************ END of the File *************************/
注意:此函数只提供调用方法(函数内无关函数都已删除),不可生搬硬套。
int main(void)
{
SystemInit();
//System Set Up
Set_Up();
while(1)
{
//System Loop
Loop();
}
}
/* System Set Up */
void Set_Up(void)
{
MPU6050_Init();
}
short int gyro_x=0;
short int gyro_y=0;
short int gyro_z=0;
short int accel_x=0;
short int accel_y=0;
short int accel_z=0;
void Loop(void)
{
MPU6050_Read();
gyro_x = ((((int16_t)MPU6050_Buffer[0])<<8) | MPU6050_Buffer[1]);
gyro_y = ((((int16_t)MPU6050_Buffer[2])<<8) | MPU6050_Buffer[3]);
gyro_z = ((((int16_t)MPU6050_Buffer[4])<<8) | MPU6050_Buffer[5]);
accel_x = ((((int16_t)MPU6050_Buffer[ 8])<<8) | MPU6050_Buffer[ 9]);
accel_y = ((((int16_t)MPU6050_Buffer[10])<<8) | MPU6050_Buffer[11]);
accel_z = ((((int16_t)MPU6050_Buffer[12])<<8) | MPU6050_Buffer[13]);
}
本教程由 Brendon Tan 原创发布,版权所有。该文档仅供个人学习交流使用,不得用于其他用途,禁止商用, 转载或公开使用请联系作者授权。
此教程由本人独立整理,如有不当之处,欢迎指正。