嵌入式实验 之 I2C实验(IIC)

版权归如下公司,禁止非授权转载:

  • 北京西普阳光教育科技股份有限公司(https://www.simpleware.com.cn)
  • 维周机器人科技有限公司(http://www.vejoe.com)


【实验目的】

  • 掌握I2C协议的内容,了解I2C接口的特点。
  • 了解陀螺仪MPU6050的用途及数据采集过程。
  • 熟悉STM32F10xx系列微控制器的I2C配置,完成通过I2C读取陀螺仪MPU6050数据的实验。

【实验原理】

I2C (Inter-Integrated Circuit)协议是由Phiilps公司开发的,由于它具引脚少,硬件实现简单,可扩展性强,不需要如USART、CAN的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

一、I2C总线协议:

I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。

  • 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
  • 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。

二、I2C接口特性

  1. STM32的中等容量和大容量型号的芯片均有多达2个的I2C总线接口。
  2. 能够工作于多主模式或从模式,分别为主接收器,主发送器,从接收器及从发。
  3. 支持标准模式100Kbit/s和快速模式400Kbit/s,不支持高速模式。
  4. 支持7位或10位寻址。
  5. 内置了硬件CRC发生器/校验器。
  6. I2C的接收和发送都可以使用DMA操作。
  7. 支持系统管理总线(SMBus)总线2.0版。

三、MPU6050相关

MPU-6050为9轴运动处理传感器。它集成了3轴陀螺仪,3轴加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。MPU-6050上所有设备寄存器之间的通信采用400kHz的I2C接口。另外,片上还内嵌了一个温度传感器和在工作环境下仅有±1%变动的振荡器。

四、硬件连接和库函数介绍

在这里插入图片描述
图1 硬件连接示意图
本实验中使用的库函数主要有unsigned char I2C_ReadOneByte(unsigned char I2C_Addr,unsigned char addr),其功能为读取指定设备,指定寄存器的一个值,其参数分别为:
I2C_Addr:目标设备地址,在我们的实验中为陀螺仪和加速度计的地址。
Addr:寄存器地址,即存放陀螺仪信息和加速度计信息的寄存器地址

五、软件流程图

本实验项目需要包涵oled.c显示屏库函数、MPU6050.c运动传感器库函数、delay.c延时库函数,本实验的实验流程图如图2所示:

图2 实验流程示意图

【实验环境】

硬件设备

双轮自平衡机器人。如图3所示,平衡车所搭载的电路板上已经搭载MPU6050芯片。
ST-Link下载器(包含USB线与下载线)。如图4所示。

操作系统

Windows7/8/10,32bit/64bit

在这里插入图片描述
图3 双轮自平衡机器人
在这里插入图片描述
图4 ST-Link下载器与下载线

软件环境

Keil 5
实验场地:

【实验步骤】

第一步 配置工程环境

打开已经建立好的工程模板,在新建立的工程模板中已经添加五个文件夹,分别命名为USER、HARDWARE、SYSTEM、CORE、FWLib文件夹,如图5所示。其中USER文件夹存放的是主函数,HARDWARE文件夹存放的是本实验对应的硬件设备函数,SYSTEM存放的是本课程所有实验通用的函数,CORE文件夹存放的是启动文件,FWLib文件夹存放的是底层驱动函数。
在这里插入图片描述
图5工程模板对应的文件夹
在HARDWARE文件夹下右键导入已存在文件IOI2C.c和IOI2C.h文件,这两个文件保存在工程目录下MiniBalance_HARDWARE文件夹中IIC文件夹内,如图6所示。
在这里插入图片描述
图6 在HARDWARE文件夹下导入IOI2C.c和IOI2C.h文件

第二步 编写IIC实现函数

打开刚刚导入程序中的IOI2C.h文件,可以发现文件里已经预定义了许多函数。

/*----------------------------------IIC的操作函数---------------------------------*/
void IIC_Init(void);						//初始化IIC的IO口			 	int IIC_Start(void);						//发送IIC 开始信号
void IIC_Stop(void); 					//发送IIC停止信号
void IIC_Send_Byte(u8 txd);				//IIC发送一个字节
u8 IIC_Read_Byte(unsigned char ack);		//IIC读取一个字节
int IIC_Wait_Ack(void);					//IIC等待ACK信号
void IIC_Ack(void);					//IIC发送ACK信号
void IIC_NAck(void);					//IIC不发送ACK信号
void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放羊郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值