OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3926|回复: 4

MPU6050 STM32F103

[复制链接]

8

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2015-2-9
在线时间
10 小时
发表于 2015-2-17 19:49:18 | 显示全部楼层 |阅读模式
5金钱
求大神共享一份MPU6050的STM32F103寄存器版程序

最佳答案

查看完整内容[请看2#楼]

回复【3楼】菜鸟哦: --------------------------------- void InitMPU6050() { u32 i,t; s16 gxb=0,gyb=0,gzb=0; for(i=0;i<10000;i++); GPIOB->CRL&=~(0XF<<(7*4));  GPIOB->CRL|=0X0000007<<(7*4);//PB1 开漏输出   GPIOB->CRL&=~(0XF<<(6*4));  GPIOB->CRL|=0X00000003<<(6*4);//PB10 推挽输出   for(i=0;i<1000;i++ ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
发表于 2015-2-17 19:49:19 | 显示全部楼层
回复【3楼】菜鸟哦:
---------------------------------

void InitMPU6050()
{
u32 i,t;
s16 gxb=0,gyb=0,gzb=0;

for(i=0;i<10000;i++);
GPIOB->CRL&=~(0XF<<(7*4)); 
GPIOB->CRL|=0X0000007<<(7*4);//PB1 开漏输出  

GPIOB->CRL&=~(0XF<<(6*4)); 
GPIOB->CRL|=0X00000003<<(6*4);//PB10 推挽输出  
for(i=0;i<1000;i++);
single_writei2c(PWR_MGMT_1,0x00); //解除休眠状态
for(i=0;i<1000;i++);
single_writei2c(SMPLRT_DIV, 0x02); //采样率 
for(i=0;i<1000;i++);
single_writei2c(CONFIG, 0x06);
for(i=0;i<1000;i++);
single_writei2c(GYRO_CONFIG, 0x18);//精度
for(i=0;i<1000;i++);
single_writei2c(ACCEL_CONFIG, 0x18);
for(i=0;i<500000;i++);

}

int getdata(u8 add)
{
s16 h;
h=single_readi2c(add)<<8;
h+=single_readi2c(add+1);
if(add==0x43)h+=-*(u32 *)0x0800f800+1;
if(add==0x45)h+=-*(u32 *)0x0800f810;
if(add==0x47)h+=-*(u32 *)0x0800f820;
if(add==0x3b)h-=92;
if(add==0x3d)h+=0;
if(add==0x3f)h+=160;
return h;
}

s16 duwenduMPU6050()
{
s16 temp;
temp=single_readi2c(TEMP_OUT_H)<<8; //读取温度
temp+=single_readi2c(TEMP_OUT_L);
temp=temp;
return temp;
}
为了雅典娜?为了爱与正义
回复

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
发表于 2015-2-18 08:47:40 | 显示全部楼层
#include "sys.h"

#define SDAO Bout(7)// A8
#define SCLO Bout(6)// A8
#define SDAI Bin(7)// A8
#define SCLI Bin(6)// A8

#define SlaveAddress 0xD0 //IIC写入时的地址字节数据,+1为读取



//起始信号

i2c_start()
{

SCLO=1;
SDAO=1;
SDAO=0;
SCLO=0;

}

//停止信号

i2c_stop()
{
SDAO=0;
SCLO=1;
SDAO=1;
}
////I2C发送应答信号
i2c_sendack(u8 ack)
{
SDAO=ack%2;
SCLO=1;
SCLO=0;
}
//**************************************
//I2C接收应答信号
//**************************************
i2c_recvack()
{
u8 cy;
SCLO=1;
cy=SDAI;
SCLO=0;
return cy;
}
//**************************************
//向I2C总线发送一个字节数据
//**************************************
i2c_sendbyte(u8 dat)
{
u8 i;
for(i=0;i<8;i++)
{
if(dat&0x80)SDAO=1;
else SDAO=0;
dat<<=1;
SCLO=1;
SCLO=0;
}
i2c_recvack();
}
//**************************************
//从I2C总线接收一个字节数据
//**************************************
u8 i2c_recvbyte()
{
u8 i,dat=0;
SDAO=1;
for(i=0;i<8;i++)
{
dat<<=1;
SCLO=1;
dat|=SDAI;
SCLO=0;
}
return dat;
}
//**************************************
//从MPU6050写入一个字节数据
//**************************************
single_writei2c(u8 add,u8 dat)
{
i2c_start();
i2c_sendbyte(SlaveAddress);
i2c_sendbyte(add);
i2c_sendbyte(dat);
i2c_stop();
}
//**************************************
//从MPU6050读取一个字节数据
//**************************************
u8 single_readi2c(u8 add)
{
u8 dat;
i2c_start();
i2c_sendbyte(SlaveAddress);
i2c_sendbyte(add);
i2c_start();
i2c_sendbyte(SlaveAddress+1);
dat=i2c_recvbyte();
i2c_sendack(1);
i2c_stop();
return dat;
}
为了雅典娜?为了爱与正义
回复

使用道具 举报

8

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2015-2-9
在线时间
10 小时
 楼主| 发表于 2015-2-19 08:28:21 | 显示全部楼层
回复【2楼】wsnfly:
---------------------------------
谢谢大神   这只有IIC的   我还要MPU6050的程序   可否把这一整个程序发我邮箱1792681370@qq.com
回复

使用道具 举报

8

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2015-2-9
在线时间
10 小时
 楼主| 发表于 2015-2-21 22:56:45 | 显示全部楼层
谢谢啦回复【4楼】wsnfly:
---------------------------------
谢谢啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 19:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表