I²C通信

1,介绍协议规则,用软件模拟的形式来实现协议。

2,介绍外设,用硬件来实现协议。

I²C通信协议

基本目的:通过通信线,实现单片机读写外挂模块寄存器的功能。(在指定位置写寄存器和在指定位置读寄存器)

 SCL:时钟线(随时暂停传输,去处理其他事)即使没有硬件电路的支持,也可以很方便的用软件手动反转电平来实现通信。

 本课程只用:一主多从。

I²C硬件电路                      

 所有I²C设备的SCL连接一起,SDA连在一起。

设备的SCL和SDA均要配置成开漏输出模式(这个模式有一个线与的现象,只要有一个设备输出低电平,总线就处于低电平)

I²C时序基本单元(虚线表示是从线控制,实线表示是主机控制)

 起始:SCL不动,主机让SDA产生一个下降沿,然后主机让SCL下降  ( 之后保证除了起始和终止条件,每个时序单元都以低电平开始  低电平结束 )(当从机捕获到这个状态时:从机复位,等待召唤)        终止:略

发送一个字节:在SCL高电平,期间读取SDA的电平(很快一般在上升沿就读完了)(SCL和SDA全程被主机掌控 , 从机只能被动读取)

高位先行:B7B6B5B4B3B2B1B0 (串口时序是低位先行

如果进入中断:因为有时钟线(同步时序)SCL和SDA被无线拉长等回来时继续,传输不会有问题

 接收一个字节:释放SDA让从机写入.

发送接收应答:略。

I²C完整时序

从机地址

        MPU6050的器件地址位1101 000(一般地位可以改变)板子上的AD0引脚可以改变地址的最后一位。

指定地址写 

 应答位:主机释放SDA(只看主机SDA为高),从机拽住SDA(从机收到拉低SDA)  低电平表示

收到了

当前地址读

 当前地址指针:写入一个数据后,当前地址指针会自动加一。

指定地址读

读的时候:结束时要吧SA置1,表示主机不想玩了,从机放出SDA线的控制权给主机。

将 指定地址写 的前面设置指定地址 和 当前地址读 结合起来。

外挂模块MPU6050

MPU6050简介

MPU6050是一个6轴姿态传感器,可以测量芯片自身XYZ轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景

3轴加速度计(Accelerometer):测量XYZ轴的加速度

3轴陀螺仪传感器(Gyroscope):测量XYZ轴的角速度

 MPU6050参数

16ADC采集传感器的模拟信号,量化范围:-32768~32767

加速度计满量程选择:±2±4±8±16g

陀螺仪满量程选择: ±250±500±1000±2000°/sec

可配置的数字低通滤波器

可配置的时钟源

可配置的采样分频

I2C从机地址:

1101000(AD0=0) 

1101001(AD0=1

两种选择从机地址:一 0110 1000 = 0x68 二 110 1000 +  读写位 = 0xD0(写地址)or   0xD1(读地址)

MPU6050硬件电路

 XCL,XDA:扩展。

MPU6050框图

 手册25页有详细说明。

看寄存器和产品手册。

寄存器了解

 

软件I²C实例

硬件I²C

STM32 内部集成了硬件 I2C 收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻 CPU 的负担
支持多主机模型
支持 7 /10 位地址模式
支持不同的通讯速度,标准速度 ( 高达 100 kHz) ,快速 ( 高达 400 kHz)
支持 DMA
兼容 SMBus 协议
STM32F103C8T6 硬件 I2C 资源: I2C1 I2C2

发送

 

接收

 

I2C寄存器描述  看参考手册 24 章 I2C接口 的 24.6

代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值