6124|6

55

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【F7-2015】04.I2C的使用 [复制链接]

本帖最后由 为半导而生 于 2015-12-10 22:24 编辑

一、实验目的

学习使用STM32F7I2C,进行MPU6050数据的采集。

二、开发工具

STM32CUBEMX

KEIL V5

三、开发步骤
1.STM32F7的时钟初始化(本小组按照nemo1991方式进行系统初始化)

STM32的时钟系统相对复杂,可以使用多种时钟源,同时可以选择锁相环、倍频分频系数等,同时不同的外设总线可以设置相应的时钟频率。

本次实验中,我们使用内部时钟作为时钟源。

首先,打开STM32CUBEMX(下文简称CUBE),选择新建工程。之后选择MCU的型号,DIS板子上的芯片型号是STM32F746NGH,点击OK。此时即可完成工程的基本创建。

之后选择clockconfiguration进行时钟配置。几个要点:使用HSIRC内部16M时钟作为时钟源;使用PLL,设置分频倍频系数,使得PLL输出为200M(事实上F7的最高时钟频率官方设置为216M);之后合理设置分频系数给HCLK和后续外设及总线使用。

至此,完成时钟初始化。
2.I2C引脚选择

对于F7的板子,可以引出来的管脚只有Arduino兼容的部分管脚。引脚中包含I2C,这里,对应在F7上的引脚如图1所示。
3.I2C引脚设置

本次设计中,I2C对应的三个引脚为PB8PB9。使用I2C复用功能下,IO应该设置为上拉。具体设置如图2所示。
4.I2C功能设置

按照MPU6050通讯要求,可以使用高速模式的I2C,这里设置如下。具体设置如图3所示。


5.I2C读写函数

  1. void i2cWrite(uint16_t DevAddress, uint16_t MemAddress, uint8_t data)
  2. {
  3.         uint8 pData[1];
  4.         pData[0] = data;
  5.         HAL_I2C_Mem_Write(&hi2c1, DevAddress, MemAddress, I2C_MEMADD_SIZE_8BIT, pData, 1, 500);
  6. }

  7. uint8 i2cRead(uint16_t DevAddress, uint16_t MemAddress)
  8. {
  9.         uint8 data[1];
  10.         HAL_I2C_Mem_Read(&hi2c1, DevAddress, MemAddress, I2C_MEMADD_SIZE_8BIT, data, 1, 500);
  11.         return data[0];
  12. }
复制代码


6.MPU6050的初始化
  1. void MPU6050_Init()
  2. {
  3.         i2cWrite(MPU6050_ADDR, PWR_MGMT_1, 0x00);        //½â³ýÐÝÃß״̬
  4.         i2cWrite(MPU6050_ADDR, SMPLRT_DIV, 0x07);
  5.         i2cWrite(MPU6050_ADDR, CONFIG, 0x06);

  6.         //Ñ¡ÔñÁ¿³Ì
  7.         #if GYRO_SCALE == GYRO_SCALE_250dps
  8.         i2cWrite(MPU6050_ADDR, GYRO_CONFIG, 0x00);
  9.         //gyro_coeff = 131.072;
  10.         #endif
  11.         #if GYRO_SCALE == GYRO_SCALE_500dps
  12.         i2cWrite(MPU6050_ADDR, GYRO_CONFIG, 0x08);
  13.         //gyro_coeff = 65.536;
  14.         #endif
  15.         #if GYRO_SCALE == GYRO_SCALE_1000dps
  16.         i2cWrite(MPU6050_ADDR, GYRO_CONFIG, 0x10);
  17.         //gyro_coeff = 32.768;
  18.         #endif
  19.         #if GYRO_SCALE == GYRO_SCALE_2000dps
  20.         i2cWrite(MPU6050_ADDR, GYRO_CONFIG, 0x18);
  21.         //gyro_coeff = 16.384;
  22.         #endif

  23.         i2cWrite(MPU6050_ADDR, ACCEL_CONFIG, 0x00);
  24. }
复制代码


7.MPU6050原始数据读取
  1. int16 MPU6050_GetData(char REG_Address)
  2. {
  3.         int8 H,L;
  4.         H = i2cRead(MPU6050_ADDR, REG_Address);
  5.         L = i2cRead(MPU6050_ADDR, REG_Address+1);
  6.         return (H<<8)+L;
  7. }
复制代码



此帖出自stm32/stm8论坛

最新回复

为啥我用F1读的数是F4呢  详情 回复 发表于 2016-6-18 12:52
点赞 关注
 

回复
举报

23

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
硬件IIC?
此帖出自stm32/stm8论坛
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
你好,我最近也在用cubeMx并将mpu6050移植到STM32F103VE上,dmp_load_motion_driver_firmware()这一步上一直失败,我整了十几天了,整个人都要崩溃了。我使用的是 HAL_I2C_Mem_Read( )和HAL_I2C_Mem_Write( ).我一直没找到到底是哪里错了。我的i2c是使用16位读写方式。你能帮我看看吗,我的源程序我放在附件里了。感激不尽!

MPU6050移植8.zip

978.66 KB, 下载次数: 104

MPU6050

此帖出自stm32/stm8论坛

点评

我没有你这个板子无法调试。 你测试过不经过dmp,直接读取数据吗?  详情 回复 发表于 2016-4-7 11:10
 
 

回复

667

帖子

3

TA的资源

版主

4
 
爱明天会更好19 发表于 2016-4-7 10:17
你好,我最近也在用cubeMx并将mpu6050移植到STM32F103VE上,dmp_load_motion_driver_firmware()这一步上一 ...

我没有你这个板子无法调试。
你测试过不经过dmp,直接读取数据吗?
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

5
 
本帖最后由 爱明天会更好19 于 2016-4-7 13:58 编辑
nemo1991 发表于 2016-4-7 11:10
我没有你这个板子无法调试。
你测试过不经过dmp,直接读取数据吗?

不经过DMP我能读取成功。网上基本都是用STD库的例子,我用HAL库就不行了,网上使用HAL库的例子太少了。光是整DMP这一项,我都弄了十几天了,一点进展都没有,dmp的官方资料我也看了,上面描述非常简陋。你那里可以调试下吗,不用STM32F103的也可以调的。我个人觉得,主要问题应该是在I2C读写配置上。
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

6
 
问题终于解决了,原来我的程序并没有错。问题出在,我使用的是ST-Link供电,电压偏低,导致无法正常读写EEPROMM。就这么个问题,竟然让我浪费了十天的时间。
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
为啥我用F1读的数是F4呢
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表