【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前,我们先捋一捋,串口的相关特点来和I2C进行一个对北比。

首先:

1,大部分单片机,设计的PCB板均带有串口通信的引脚(也就是通信基本都借助硬件收发器来实现)

2.对于串口的异步时序,软件实现起来就异常麻烦。硬件实现非常简单。所以串口的实现基本就全倒向了硬件。

右边的图片中的串口时序就可以看出来软件模拟的复杂性

其次:II2C是同步时序,软件实现简单灵活,(在前面讲过的I2C时序,明显就简单的多)

硬件实现,相比之下,去并不能让人完全省心。

所以I2c的实现,软件模拟的情况是非常多的.

但是考虑到硬件I2C也有很多独有的优势,比如执行效率比较高,可以节省软件资源。

功能比较强大,可以实现完整的多主机通信模型,时序波形规整,通信速率快等等。

所以硬件I2C也有相应的应用场景。
现在我们就来学习一下关于I2C通信外设。也就是硬件实现I2C通信。

硬件资源:STM32内部的I2C外设

4.支持不同的通讯速度,标准速度(高达100kHz),快速(高达400kHz)

5.支持DMA(多字节传输,可以提高传输效率)

6.兼容SMBust协议(了解即可)

7.STM32F103C8T6硬件2C资源:I2C1、I2C2(硬件资源有限,软件就无限了)

硬件2C的引脚都是固定在对应的引脚上。(参考引脚定义表)

这里提一句,STM32参考手册中2C描述的多主机模型,如果对12C没学过基本是看不懂的。

只有先简单的学习过一主多从模型,再去看手册才比较容易理解。

STM32的硬件12C采用的就是多主机模型中的可变多主机,所以就必须按照该模型进行操作

当需要通信的时候,

1.第一步要将该从机先跳出来,变成主机。

2第二步指定要通信的从机

数据收发的核心部分:如下图红框中

发送的流程:

  1. 可以把一个字节写到数据寄存器DR
  2. 当移位寄存器没有数据移位时,会将数据寄存器中的数据移到移位寄存器中
  3. 在移位的过程中,我们就会把下一个数据写到数据寄存器中。
  4. 连续循环。
  5. 当数据寄存器的值移到移位寄存器中时,状态寄存器的TXE位为1,表示发送寄存器为空

接收的流程:

  1. 输入的数据一位一位的动引脚移位到移位寄存器里
  2. 当一个字节的数据收齐以后,数据就整体从移位寄存器转到数据寄存器·
  3. 同时置标志位RXNE,表示接收寄存器非空。
  4. 这个时候我们就可以把数据从数据寄存器读出来了

至于什么时候收,什么时候发?

我们就必须借助控制寄存器。起始,应答,停止,均是由控制电路完成。

I2C内部外设结构图

I2C基本结构

主机发送





主机接收

相关推荐
GodKK老神灭8 分钟前
SWD读取AP寄存器完整流程
单片机·keil
羽获飞8 分钟前
从零开始学嵌入式之STM32——27.基于STM32F103C8T6MCU的寄存器方式实现按键调整PWM占空比,调整输出功率
stm32·单片机·嵌入式硬件
学嵌入式的小杨同学11 分钟前
STM32 进阶封神之路(十五):DHT11 单总线实战 —— 温湿度检测从时序解析到代码落地(库函数 + 寄存器)
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·pcb工艺
QYQ_11271 小时前
嵌入式学习——51单片机
嵌入式硬件·学习·51单片机
2501_937721751 小时前
stm32
stm32·单片机·嵌入式硬件
DLGXY1 小时前
STM32(二十五)——修改主频、睡眠模式、停机模式、待机模式
stm32·单片机·嵌入式硬件
BackCatK Chen1 小时前
2026年STM32新品密集发布:C5系列量产上市,低功耗无线MCU同步迭代
stm32·单片机·嵌入式硬件·stm32c5·mcu新品·stm32wl3r
沐欣工作室_lvyiyi1 小时前
智能家居环境监测系统的设计与实现(论文+源码)
stm32·毕业设计·智能家居·环境监测
最概然1 小时前
单片机也能玩依赖注入?
单片机·嵌入式硬件
bing_feilong2 小时前
ubuntu22.04: 安装ROS2并测试
嵌入式硬件·机器人