149 stm32 I2C总线通信Word文档下载推荐.docx

上传人:b****5 文档编号:21423447 上传时间:2023-01-30 格式:DOCX 页数:18 大小:2.50MB
下载 相关 举报
149 stm32 I2C总线通信Word文档下载推荐.docx_第1页
第1页 / 共18页
149 stm32 I2C总线通信Word文档下载推荐.docx_第2页
第2页 / 共18页
149 stm32 I2C总线通信Word文档下载推荐.docx_第3页
第3页 / 共18页
149 stm32 I2C总线通信Word文档下载推荐.docx_第4页
第4页 / 共18页
149 stm32 I2C总线通信Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

149 stm32 I2C总线通信Word文档下载推荐.docx

《149 stm32 I2C总线通信Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《149 stm32 I2C总线通信Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

149 stm32 I2C总线通信Word文档下载推荐.docx

拓扑结构

I2C总线在物理连接上分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。

通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。

在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

(二)I2C总线协议

●I2C协议规定:

总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。

起始和结束信号总是由主设备产生。

总线在空闲状态时,SCL和SDA都保持着高电平。

起始信号:

当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件

结束信号:

当SCL为高而SDA由低到高的跳变,表示产生一个停止条件

●数据传输

数据传输以字节为单位,主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,数据在时钟的高电平被采样,一个字节按数据位从高位到低位的顺序进行传输

主设备在传输有效数据之前要先指定从设备的地址,一般为7位,然后再发生数据传输的方向位,0表示主设备向从设备写数据,1表示主设备向从设备读数据

●应答信号

接收数据的器件在接收到8bit数据后,向发送数据的器件发出低电平的应答信号,表示已收到数据。

这个信号可以是主控器件发出,也可以是从动器件发出。

总之,由接收数据的器件发出。

(三)I2C总线读写操作

主设备往从设备写数据

主设备读从设备数据

主设备读从设备的某个寄存器

(四)STM32F0-I2C控制器特性

●软件模拟I2C时序

由于直接控制GPIO引脚电平产生通讯时序时,需要由CPU控制每个时刻的引脚状态,所以称之为“软件模拟协议”方式。

●硬件控制产生I2C时序

STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。

这种由硬件外设处理I2C协议的方式减轻了CPU的工作,且使软件设计更加简单。

●I2C的主要特点

I2C总线规范rev03兼容性:

-从机模式和主机模式

-多主机功能

-标准模式(高达100kHz)

-快速模式(高达400kHz)

-超快速模式(高达1MHz)

-7位和10位地址模式

-软件复位

1字节缓冲带DMA功能

(五)STM32F0-I2C控制

SCL:

时钟,I2C1的话pb6或者8都可以

SDA:

数据传输

I2C的主要特点

§

64KB片上闪存的F0带2个I2C:

I2C1和I2C2

32KB片上闪存的F0只带1个I2C:

I2C1

I2C2比I2C1所支持的功能少些,不具备

对SMBus的硬件支持

20mA的驱动能力

模块双时钟域以及从停止模式唤醒

二、三轴加速度传感器mpu6050介绍

(一)mpu6050简介

1.MPU6050介绍

MPU-6050是全球首例6轴运动处理传感器。

它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotionProcessor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。

扩展之后还可以通过其I2C输出一个9轴的信号。

MPU-6050也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。

虽然陀螺仪可以测量加速度和角速度,但是大部分是用来测量角速度的。

2.三轴加速度测量

注意:

加速度测量计反应的加速向量与当前的受力方向是相反的,如上图,受力方向向左,但是加速度的向量方向为右

3.陀螺仪

陀螺仪,是用来测量角速度的,单位为度每秒(deg/s)

一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。

人们根据这个道理,用它来保持方向。

Mpu6050有3个陀螺仪,可测X,Y,Z方向的角速度值

(二)mpu6050特性参数

关于分辨率的计算:

首先加速度和陀螺仪都是16位的。

216/4(加速度测量范围+-2)=65536/4=16384

当加速度测量范围为+-2以上的时候,意味着分母越来越大,分辨率就越小。

(三)mpu6050寄存器介绍

1.POWERMANAGEMENT电源管理寄存器

SLEEP该位置1,MPU-60X0进入睡眠模式。

CLKSEL置0,可选择使用MPU-60X0默认的内部8M振荡器作为时钟源

●典型设置

//解除休眠状态

I2C_WriteReg(MPU6050_RA_PWR_MGMT_1,0x00);

2.SAMPLERATEDIVIDER采样频率分频器

采样频率=陀螺仪输出频率/(1+SMPLRT_DIV)

当DLPFsisdisabled(0DLPF_CFG=0ror7777)),陀螺输出频率=8kHz;

//陀螺仪采样率,1KHz

I2C_WriteReg(MPU6050_RA_SMPLRT_DIV,0x07);

3.CONFIGURATION低通滤波配置寄存器

该寄存器配置外部引脚采样,

陀螺仪和加速度计的数字低通滤波器。

//低通滤波频率,典型值:

0x06(带宽5KHz)

I2C_WriteReg(MPU6050_RA_CONFIG,0x06);

4.GYROSCOPECONFIGURATION陀螺仪配置寄存器

该寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范围。

陀螺仪自检及测量范围,典型值:

0x18(不自检,2000deg/s)

I2C_WriteReg(MPU6050_RA_GYRO_CONFIG,0x18);

5.ACCELEROMETERCONFIGURATION加速度配置寄存器

该寄存器是用来触发加速度计自检和配置加速度计的满量程范围。

//配置加速度传感器工作在2G模式,不自检

I2C_WriteReg(MPU6050_RA_ACCEL_CONFIG,0x00);

6.读取X,Y,Z三轴加速度的值

7.读取X,Y,Z三轴陀螺仪的值

8.读取温度值

摄氏度的温度可以用寄存器的置这么计算:

TemperatureninsdegreesC=

(TEMP_OUTRegistereValueasasignedquantity)/340+36.53

三、I2C通信实例

用I2C总线读取MPU6050数据

实验要求

利用STM32-I2C总线配置MPU6050,并读取三轴加速度的原始数据

(一)寄存器

●MPU6050的设备地址

因为AD0为高电平1,所以最终得到的地址为:

1101001。

这样给一位用户自己决定的好处在于,一个设备可以配备两个mpu6050,一个接地,一个接电源,地址是不同的。

(二)MPU6050电气原理图

NC表示可以未接,而我们板子实际上也是未接R4的,所以AD0和地是断开的。

因此AD0得到的是高电平1.

注:

R4未接,AD0直接接到电源上,因此设备地址为1101001既0x69

(三)Cubemx配置

虽然我们I2C1的SCL可以是PB6和8,但是我们MPU的SCL是连接到PB8的。

配置uart的波特率,I2C采用默认模式

(四)准备工作

1.将寄存器地址头文件加入

在老师的资料中有个mpu6050.h将所有相关寄存器地址都写在里面了。

将mpu6050.h复制到同一个project的Inc目录下。

2.创建新的mpu6050.c文件

新建一个文件,并按ctrl+s选择存放地点和存放名。

图是我保存后打开的。

(五)编写代码

1.从设备地址

写的时候方向为是0,所以最后一位是0,我们在头文件中已经封装好了

2.寄存器初始化

3.获取加速度

4.获取陀螺仪角速度

5.Main中获取初始值并循环取值

四、作业

利用I2C读取三轴传感器角速度的数值,并打印出来,可截图可录制视频演示结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1