STM32学习笔记(白话文理解版)—I2C通信接口

STM32学习笔记(白话文理解版)—I2C通信接口

一、I2C总线介绍

IC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送, 高速 IIC 总线一般可达 400kbps 以上。

理论知识

  • 在I2C上只有一个主设备(STM32单片机),可以有多个从设备
  • 通过SCL时钟线,SDA数据线两条线进行通信
  • 从设备上多个时钟线,数据线是并联的,且主从设备必须共地
  • 区分每个从设备是靠设备地址,每个从设备器件都有唯一地址,最多127个器件地址

总线结构图
实际应用

  • 在STM32F103中一共有I2C1和I2C2两组I2C通信接口

  • 其中分别与不同的IO端口进行复用,在使用I2C总线时,只要打开I2C功能这个引脚功能就会自动切换到I2C功能

  • 两条总线结构,有1~10k的上拉电阻

  • 在使用是要将GPIO引脚设置为复用开漏模式

    具体可参考杜洋老师的引脚定义图
    杜洋老师

二、I2C应用

I2C初始化

IIC总线的两条信号线SCL和SDA同时处于高电平时,规定为IIC的空闲状态(IIC初始化)

I2C传输过程

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

  • 开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
  • 结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
    在这里插入图片描述
  • 应答信号:接收数据的IIC 在接收到8bit(1字节8bit)数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
    对于反馈有效应答位ACK的要求时,接收器在第9个时钟脉冲之前的低电平期间将SDA电平拉低,并且保持在第9个时钟脉冲的高电平期间为稳定的低电平。
    在这里插入图片描述
    I2C传输特点
  • 数据有效性:IIC总线在进行数据传输时,时钟信号为高电平时,数据线上的电平状态必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的电平状态才允许发生变化。
  • 数据的传送:IIC总线上传输的每一位数据都有一个时钟脉冲同步控制,在SCL串行时钟的配合下,SDA上逐位串行传送每一位数据。

三、软件I2C和硬件I2C

目前大部分 MCU 都带有 IIC 总线接口,STM32F1 也不例外。但是这里我们不使用 STM32F1的硬件 IIC,而是通过软件模拟。原因是ST为了规避飞利浦 IIC 专利问题,将 STM32的硬件 IIC 设计的比较复杂,且稳定性不怎么好.
用软件模拟 IIC, 最大的好处就是方便移植, 同一个代码兼容所有 MCU, 任何一个单片机只要有 IO 口,就可以很快的移植过去,而且不需要特定的 IO 口。 而硬件 IIC,则换一款 MCU,基本上就得重新搞一次,移植是比较麻烦的,这是我们推荐使用软件模拟IIC的另外一个原因。

资料引用:杜洋老师、B站UP主

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值