XerolySkinnerBscpp 1.0.0
C++版本的驱动库
mpu6050.cpp
浏览该文件的文档.
1
12//----------------------------------------------------------------------------------------------------
13// 头文件
14#include "bscpp_IIC_STM32.h"
15#include "mpu6050.h"
16#define delay_ms(var) HAL_Delay(var)
17bscpp_IIC_STM32 mpu6050IIC(IIC_SCK_GPIO_Port,IIC_SCK_Pin,IIC_SDA_GPIO_Port,IIC_SDA_Pin);
19//----------------------------------------------------------------------------------------------------
20// 函数区
26 u8 res;
27 //MPU_IIC_Init();//初始化IIC总线
28 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050
29 delay_ms(100);
30 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //唤醒MPU6050
31 MPU_Set_Gyro_Fsr(3); //陀螺仪传感器,±2000dps
32 MPU_Set_Accel_Fsr(0); //加速度传感器,±2g
33 MPU_Set_Rate(50); //设置采样率50Hz
34 MPU_Write_Byte(MPU_INT_EN_REG,0X00); //关闭所有中断
35 MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭
36 MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO
37 MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效
39 if(res==MPU_ADDR)//器件ID正确
40 {
41 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //设置CLKSEL,PLL X轴为参考
42 MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00); //加速度与陀螺仪都工作
43 MPU_Set_Rate(50); //设置采样率为50Hz
44 }else return 1;
45 return 0;}
46//----------------------------------------------------------------------------------------------------
56 return MPU_Write_Byte(MPU_GYRO_CFG_REG,fsr<<3);//设置陀螺仪满量程范围
57 }
58//----------------------------------------------------------------------------------------------------
68 return MPU_Write_Byte(MPU_ACCEL_CFG_REG,fsr<<3);//设置加速度传感器满量程范围
69 }
70//----------------------------------------------------------------------------------------------------
77 u8 data=0;
78 if(lpf>=188)data=1;
79 else if(lpf>=98)data=2;
80 else if(lpf>=42)data=3;
81 else if(lpf>=20)data=4;
82 else if(lpf>=10)data=5;
83 else data=6;
84 return MPU_Write_Byte(MPU_CFG_REG,data);//设置数字低通滤波器
85 }
86//----------------------------------------------------------------------------------------------------
93 u8 data;
94 if(rate>1000)rate=1000;
95 if(rate<4)rate=4;
96 data=1000/rate-1;
97 data=MPU_Write_Byte(MPU_SAMPLE_RATE_REG,data); //设置数字低通滤波器
98 return MPU_Set_LPF(rate/2); //自动设置LPF为采样率的一半
99 }
100//----------------------------------------------------------------------------------------------------
106 u8 buf[2];
107 short raw;
108 float temp;
110 raw=((u16)buf[0]<<8)|buf[1];
111 temp=36.53+((double)raw)/340;
112 return temp*100;}
113//----------------------------------------------------------------------------------------------------
121u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz){
122 u8 buf[6],res;
124 if(res==0){
125 *gx=((u16)buf[0]<<8)|buf[1];
126 *gy=((u16)buf[2]<<8)|buf[3];
127 *gz=((u16)buf[4]<<8)|buf[5];}
128 return res;}
129//----------------------------------------------------------------------------------------------------
137u8 MPU_Get_Accelerometer(short *ax,short *ay,short *az){
138 u8 buf[6],res;
140 if(res==0){
141 *ax=((u16)buf[0]<<8)|buf[1];
142 *ay=((u16)buf[2]<<8)|buf[3];
143 *az=((u16)buf[4]<<8)|buf[5];}
144 return res;}
146//----------------------------------------------------------------------------------------------------
147// 适配区
156u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf){
157 mpu6050IIC.IIC_Write(addr,reg,(u8*)buf,len);
158 return 0;}
159//----------------------------------------------------------------------------------------------------
168u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf){
169 mpu6050IIC.IIC_Read(addr,reg,(u8*)buf,len);
170 return 0;}
171//----------------------------------------------------------------------------------------------------
180 return 0;}
181//----------------------------------------------------------------------------------------------------
190
实现针对STM32的软件IIC类
STM32版本的软件IIC 需要使用构造函数初始化
void IIC_Write(u8 id, u8 addr, u8 *dat, u32 len)
使用总线发送定长数据
Definition: bscpp_IIC.cpp:177
u8 IIC_ReadOneByte(u8 id, u8 addr)
使用总线接收一个字节数据
Definition: bscpp_IIC.cpp:153
void IIC_Read(u8 id, u8 addr, u8 *dat, u32 len)
使用总线接收定长数据
Definition: bscpp_IIC.cpp:198
void IIC_WriteOneByte(u8 id, u8 addr, u8 dat)
使用总线发送一个字节数据
Definition: bscpp_IIC.cpp:136
const struct gyro_reg_s reg
Definition: inv_mpu.c:489
u8 MPU_Set_Rate(u16 rate)
设置MPU6050的采样率(假定Fs=1KHz)
Definition: mpu6050.cpp:92
u8 MPU_Write_Byte(u8 reg, u8 data)
IIC写一个字节
Definition: mpu6050.cpp:178
u8 MPU_Read_Byte(u8 reg)
IIC读一个字节
Definition: mpu6050.cpp:187
u8 MPU_Get_Accelerometer(short *ax, short *ay, short *az)
得到加速度值(原始值)
Definition: mpu6050.cpp:137
u8 MPU_Set_LPF(u16 lpf)
设置MPU6050的数字低通滤波器
Definition: mpu6050.cpp:76
short MPU_Get_Temperature(void)
得到温度值
Definition: mpu6050.cpp:105
u8 MPU_Write_Len(u8 addr, u8 reg, u8 len, u8 *buf)
IIC连续写
Definition: mpu6050.cpp:156
bscpp_IIC_STM32 mpu6050IIC(IIC_SCK_GPIO_Port, IIC_SCK_Pin, IIC_SDA_GPIO_Port, IIC_SDA_Pin)
u8 MPU_Read_Len(u8 addr, u8 reg, u8 len, u8 *buf)
IIC连续读
Definition: mpu6050.cpp:168
u8 MPU_Set_Accel_Fsr(u8 fsr)
设置MPU6050加速度传感器满量程范围
Definition: mpu6050.cpp:67
u8 MPU_Get_Gyroscope(short *gx, short *gy, short *gz)
得到陀螺仪值(原始值)
Definition: mpu6050.cpp:121
u8 MPU_Set_Gyro_Fsr(u8 fsr)
设置MPU6050陀螺仪传感器满量程范围
Definition: mpu6050.cpp:55
u8 MPU_Init(void)
初始化MPU6050
Definition: mpu6050.cpp:25
#define delay_ms(var)
Definition: mpu6050.cpp:16
#define MPU_USER_CTRL_REG
Definition: mpu6050.h:79
#define MPU_PWR_MGMT2_REG
Definition: mpu6050.h:81
#define MPU_INTBP_CFG_REG
Definition: mpu6050.h:50
#define MPU_SAMPLE_RATE_REG
Definition: mpu6050.h:24
#define MPU_CFG_REG
Definition: mpu6050.h:25
#define MPU_ACCEL_XOUTH_REG
Definition: mpu6050.h:54
#define MPU_FIFO_EN_REG
Definition: mpu6050.h:29
#define MPU_ACCEL_CFG_REG
Definition: mpu6050.h:27
#define MPU_GYRO_XOUTH_REG
Definition: mpu6050.h:64
#define MPU_DEVICE_ID_REG
Definition: mpu6050.h:85
#define MPU_PWR_MGMT1_REG
Definition: mpu6050.h:80
#define MPU_ADDR
Definition: mpu6050.h:89
#define MPU_GYRO_CFG_REG
Definition: mpu6050.h:26
#define MPU_TEMP_OUTH_REG
Definition: mpu6050.h:61
#define MPU_INT_EN_REG
Definition: mpu6050.h:51
uint8_t u8
8位无符号数类型
Definition: varint.h:40
uint16_t u16
16位无符号数类型
Definition: varint.h:41