历史上的今天
返回首页

历史上的今天

今天是:2024年08月24日(星期六)

2019年08月24日 | 【库函数版本】基于STM32F103的MPU6050的原始数据读取程序详解

2019-08-24 来源:eefocus

因为我的博客已经对I2C协议的详细过程已经做了一个例子!所以这个MPU6050的程序我将使用库函数完成!


第一步:硬件连接:


第二步:初始化I2C端口的函数:


/***PB6/PB7 端口初始化****/


static void I2C_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd  (RCC_APB2Periph_GPIOB,ENABLE ); 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);  


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; 

GPIO_Init(GPIOB, &GPIO_InitStructure); 

}


/***模式设置 使能I2C***/


static void I2C_Mode_Config(void)

{

I2C_InitTypeDef I2C_InitStructure; 


I2C_InitStructure.I2C_Mode = I2C_Mode_I2C ; 

I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; 

I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; 

I2C_InitStructure.I2C_ClockSpeed = 50000; 


I2C_Init(I2C1, &I2C_InitStructure);   


I2C_Cmd  (I2C1,ENABLE); 


I2C_AcknowledgeConfig(I2C1, ENABLE);   

}


/***初始化***/


void I2C_MPU6050_Init(void)

{   

  I2C_GPIO_Config();

I2C_Mode_Config();




第三步:写一个写数据函数和一个读数据函数


/** 读数据函数****/


void I2C_ByteWrite(uint8_t REG_Address,uint8_t REG_data)

{

  I2C_GenerateSTART(I2C1,ENABLE);


  while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));


  I2C_Send7bitAddress(I2C1,SlaveAddress,I2C_Direction_Transmitter);


  while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));


  I2C_SendData(I2C1,REG_Address);


  while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));


  I2C_SendData(I2C1,REG_data);


  while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));


  I2C_GenerateSTOP(I2C1,ENABLE);

}




/*** 读数据函数 **/


uint8_t I2C_ByteRead(uint8_t REG_Address)

{

uint8_t REG_data;


while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));


I2C_GenerateSTART(I2C1,ENABLE);


while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));


I2C_Send7bitAddress(I2C1,SlaveAddress,I2C_Direction_Transmitter);


while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));


I2C_Cmd(I2C1,ENABLE);


I2C_SendData(I2C1,REG_Address);


while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));


I2C_GenerateSTART(I2C1,ENABLE);


while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));


I2C_Send7bitAddress(I2C1,SlaveAddress,I2C_Direction_Receiver);


while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));


I2C_AcknowledgeConfig(I2C1,DISABLE);


I2C_GenerateSTOP(I2C1,ENABLE);


while(!(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)));


REG_data=I2C_ReceiveData(I2C1);


return REG_data;

}


  


/** mpu6050初始化***/  


void InitMPU6050(void)

{

I2C_ByteWrite(PWR_MGMT_1,0x00);


I2C_ByteWrite(SMPLRT_DIV,0x07);


I2C_ByteWrite(CONFIG,0x06);


I2C_ByteWrite(GYRO_CONFIG,0x18);


I2C_ByteWrite(ACCEL_CONFIG,0x01);

}




最后一步:


先写一个获取数据的函数:


unsigned int GetData(unsigned char REG_Address)

{

char H,L;

H=I2C_ByteRead(REG_Address);

L=I2C_ByteRead(REG_Address+1);

return (H<<8)+L;   

}


/**打印输出**/


主函数:


int main(void)

      //延时函数自己写

USART1_Config(); //串口数据发送自己写


I2C_MPU6050_Init(); 


         InitMPU6050();


while(1)

{

printf("rn---------加速度X轴原始数据--------%d rn",GetData(ACCEL_XOUT_H));

printf("rn---------加速度Y轴原始数据---------%d rn",GetData(ACCEL_YOUT_H)); 

printf("rn---------加速度Z轴原始数据----------%d rn",GetData(ACCEL_ZOUT_H)); 

printf("rn---------陀螺仪X轴原始数据----------%d rn",GetData(GYRO_XOUT_H)); 

printf("rn---------陀螺仪Y轴原始数据----------%d rn",GetData(GYRO_YOUT_H)); 

printf("rn---------陀螺仪Z轴原始数据----------%d rn",GetData(GYRO_ZOUT_H));

delay_ms(2000);

printf("===================================================================== /r/n");


}




PC显示结果:


完成了!!!

推荐阅读

史海拾趣

登丰微(GSTEK)公司的发展小趣事

歌普电子始终将产品质量视为企业的生命线。公司采用精细化管理模式,并严格执行ISO9001质量管理体系,确保每一件产品都达到高标准。同时,歌普的产品还通过了UL、CSA、TUV等国际安全认证及RoHS2.0、REACH欧盟绿色环保检测,进一步证明了其产品的可靠性和环保性。这些努力使得歌普在市场上获得了广泛的认可,与众多知名企业建立了长期稳定的合作关系。

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

FTDI的创立可以追溯到1992年3月13日,由弗雷德·达特(Fred Dart)领导创建。初期,公司专注于为个人电脑市场提供服务,特别是针对主板芯片组的解决方案。FTDI的首发产品就得到了IBM等知名企业的青睐,这些芯片被成功应用于AMBRA和PS/2系列个人电脑中,为当时快速发展的计算机技术贡献了重要力量。这一早期成功奠定了FTDI在电子行业中稳固的基础。

Analog公司的发展小趣事

在快速发展的电子行业中,FTDI始终保持着高度的警惕性和创新精神。面对假冒芯片的威胁,公司采取了强有力的打击措施以维护用户权益和市场口碑。同时,为了更好地满足市场需求,FTDI不断加强技术团队建设,引进经验丰富的工程师和有潜力的大学毕业生,不断提升自身的研发实力和技术水平。此外,公司还密切关注市场动态和技术趋势,以便及时调整战略方向并推出具有竞争力的新产品。通过这些努力,FTDI在电子行业中持续保持着领先地位。

B&F;公司的发展小趣事

随着航空技术的不断发展,B&F公司开始积极探索与其他行业的跨界合作。例如,公司与一家知名电子公司合作,共同研发了一款新型飞行控制系统。这款系统采用了最先进的电子技术和算法,大大提高了飞机的操控性能和飞行效率。通过这种跨界合作,B&F公司不仅拓展了业务领域,还为公司带来了更多的发展机遇。

歌普(GEPU)公司的发展小趣事

随着FK系列飞机在全球范围内的知名度不断提升,B&F公司意识到,要想进一步拓展市场,必须建立完善的全球分销网络。于是,公司开始积极寻找合作伙伴,并在全球范围内建立分销点。通过这一举措,B&F公司的产品得以迅速进入更多国家,进一步提升了公司的市场份额和影响力。

Fong Ya Enterprise Co Ltd公司的发展小趣事

随着FK系列飞机在全球范围内的知名度不断提升,B&F公司意识到,要想进一步拓展市场,必须建立完善的全球分销网络。于是,公司开始积极寻找合作伙伴,并在全球范围内建立分销点。通过这一举措,B&F公司的产品得以迅速进入更多国家,进一步提升了公司的市场份额和影响力。

问答坊 | AI 解惑

MFC下面怎么用Sql Server CE?

一切完好,在.NET下面也可以用System.Data.SqlServerce下面的提供的函数成功的对数据库进行操作.包括RDA和合并复制等. 但是我在想如果不用.Net而用MFC使用系统API如果实现对Sql server ce数据操作包括RDA和合并复制之类的.有不有达人相告.感激不尽.…

查看全部问答>

智能绿色照明系统的设计及实现

智能绿色照明系统的设计及实现…

查看全部问答>

请各位指导下小弟

最近再做一个事情 就是把角度化为0到 2π 之前 比如一个角度是8 π 也就是4 π + 2π 我要把前面的4 π 去掉 也就是把 2nπ 去掉 用FPGA实现 怎么去做啊 谢谢指导一下…

查看全部问答>

stm8的选项字节软件里怎么配置

                                 我也想问你这个问题…

查看全部问答>

大学生用51单片机做的东西

昨天元宵节,单位提前两个小时放假,回家的时候路过学校,顺便去看了一下上学时教单片机的老师。老师给我看了一下我们当初建的电子实验室现在的成果,给大家分享一下!智能蔽障机器人小车 51板扩展制作的智能小车,可以实现单片机控制小车前后左右 ...…

查看全部问答>

本科G组的

本帖最后由 paulhyde 于 2014-9-15 03:13 编辑 有么有什么群有老师或大神指导的 给个号加下    …

查看全部问答>

HTC Desire S G12拆机

无聊的我,又出现了~~~~ 这次是HTC Desire S,几年前的买的手机,不慎被我把屏幕摔碎了,也没打算修了,直接拆了吧。 先来一张正面大合照 这次拆的时候没有照了,都是拆好以后照的,大家见谅啊。 每次拆的时候我都会,把每个部件收好 ...…

查看全部问答>

【晒样片】+具有线路压降补偿的车用 USB 充电器的参考设计

这组样品是和CAN收发器一起收货的,样品清单如下: 这个参考设计的功能是使用了 USB 充电控制器、降压转换器和分流放大器。借助于分流放大器,该设计能够在智能手机/平板电脑使用长约 2-3 米的电缆连接到 USB 充电器时补偿电压降的影响。由于可 ...…

查看全部问答>

相同参数晶闸管替代品求助

请问谁用过这种晶闸管的替代品的,比较常用,可以在某宝上买的到的。谢谢大神 …

查看全部问答>