历史上的今天

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

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

发布者:fnfeecjknquc 来源: eefocus关键字:库函数版本  STM32F103  MPU6050  原始数据 手机看文章 扫描二维码
随时随地手机看文章

因为我的博客已经对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显示结果:


完成了!!!

关键字:库函数版本  STM32F103  MPU6050  原始数据 引用地址:【库函数版本】基于STM32F103的MPU6050的原始数据读取程序详解

上一篇:【STM32F103攻城笔记】STM32之MDK(Keil)环境搭建(一)
下一篇:基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解2

推荐阅读

    随着近段时间新电视剧的热播,大家纷纷表示,好剧怎么都扎堆了,简直看不过来!面对洪水般袭来的这波好剧,一鼓作气全部消化是每一个追剧大军成员的心声,然而要想追剧追到飞起,有个“称手”的神器必不可少。除了出色的视听享受,手机的续航能力更是重中之重,今天新浪手机为大家介绍几款最适合追剧的手机,让你时刻满血看大片!小米Max 3(参数...
大家都知道,美国的科技领域一直都是处在世界的顶端,很多市场上的高科技都有人家的专利。新型自动驾驶技术前一段时间,苹果公司的“Project Titan”自动驾驶汽车项目又有了新的研发进展,特别是在用于辅助在恶劣天气或道路状况上安全行驶的航向校正系统,汽车的滑动门已经配备额外的传感器,不管是碰到什么样的路况,都会很好的去适应不同的道路状况。“...
据外媒 MacRumors 报道,经常分享苹果地图进展的 Justin O’Beirne 称,苹果已经开始在英国和爱尔兰测试其更详细的苹果地图应用。由于这些国家/地区的地图更新处于测试阶段,因此需要指出的是,当前并非所有用户都可以感受到这些更改。苹果在其线上的 WWDC 2020 活动中宣布,新的地图应用程序将于「今年晚些时候」登陆英国,爱尔兰和加拿大,但未...
2020年7月13日,全球第二大模拟芯片厂商ADI(Analog Devices, Inc.)正式宣布,将以全股票交易的方式收购竞争对手,全球第七大模拟芯片公司Maxim Integrated,涉及交易金额达209.1亿美元,合并后的公司估值将超680亿美元(约人民币4760亿)。根据《反垄断法》,如若双方公司在全球范围内的收入超过100亿并且在中国市场收入超过4亿,那么我国相关监管部...

史海拾趣

问答坊 | AI 解惑

市面上现在热销的P10_16X32LED点阵原理图,独家放送!

市面上现在热销的P10_16X32LED点阵原理图,独家放送!由于厂家保密不给原理图和源程序,为了方便自己和大家手工制作,熬夜绘制的详细原理图,麻烦大虾编个显示汉字的程序给我, 不胜感激! 放图:…

查看全部问答∨

altera FPGA学习

在这里,就简单描述一下自己当时学习FPGA的经过: 1、语言的学习,当时在学校的时候听了点电子设计的课程,然后略知了点VHDL,后来发现VHDL不太实用(个人认为),所以就学习verilog HDL; 2、FPGA的学习,主要是对其的了解,刚开始学么,当时选 ...…

查看全部问答∨

功率因素与视在功率与无用功功率区别

无论是LED、萤光灯还是白炽灯具,我们都要了解其中的一个重要参数——功率因素(PFC),下我们来了解下什么是功率因素。1、功率因素功率因数表征着灯具输出有功功率的能力。功率是能量的传输率的度量,在直流电路中它是电压V和电流A和乘积。在交流 ...…

查看全部问答∨

新手求wifi开发的步骤

我是新手刚刚开始实习,要学着用SPI协议,开发wifi。 其实代码是别人已经写好的,可惜我没学过任何有关嵌入式开发的东西(之前都是学桌面应用程序开发的) 在WM系统下的,AKU是6.1的。 希望前辈们指点下wifi开发过程中的一些流程和代码编写的经验 ...…

查看全部问答∨

请问有高手看得懂这个程序吗??我搞不懂怎么弄引脚锁定!~~~~

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity correct_counter2 is port(     en:     in  std_logic;     ren:    in &nb ...…

查看全部问答∨

pda上开发的应用软件,如果加密, 那种方式比较安全(依靠硬件)

pda上开发的应用软件,如果加密, 那种方式比较安全(依靠硬件)?…

查看全部问答∨

Wince与Oracle问题,大家一起搞定他

wince 连接PC Oracle都能通过什魔方式?如何做?这问题我看很多人都问过,大家把想法意见都列出来,彻底解决他.^_^…

查看全部问答∨

【设计工具】说明ISE+timing+constrain+的用法

  wConstraints Guide: Quick Start Guide appendix H. wUsing Timing Constraints: Developmental System Reference Guide chapter 6. wTiming Analyzer: Timing Analyzer Reference/User Guide. wTRCE: Developmental System Refer ...…

查看全部问答∨

MSP430不能下载成功

显示的错误信息,跟不接学习板,采用硬件仿真的提示错误信息一样。 为: fatal error unknown exception in driver(#E1) session aborted!…

查看全部问答∨

atmel zigbee协议栈移植(zigduino开发板)

刚接触zigbee,用的板子是zigduino开发板,MCU型号是Atmel公司的Atmega128RFA1,想移植zigbee协议栈上去,但不知道从何下手。 看了开发板的用户手册,支持atmel的bitCloud SDK,看了相关资料,还是一头雾水。。。 想问问大家怎么移植bitCloud到板 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved