【江科大】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基本结构

主机发送





主机接收

相关推荐
欢乐熊嵌入式编程40 分钟前
智能手表固件升级 OTA 策略文档初稿
嵌入式硬件·学习·智能手表
欢乐熊嵌入式编程1 小时前
智能手表 MCU 任务调度图
单片机·嵌入式硬件·智能手表
【云轩】1 小时前
电机密集型工厂环境下的无线通信技术选型与优化策略
经验分享·嵌入式硬件
Mr zhua1 小时前
STM32G474VET6-CAN FD使用经典模式+过滤报文ID
stm32·can·tim
sword devil9002 小时前
将arduino开发的Marlin部署到stm32(3D打印机驱动)
stm32·单片机·嵌入式硬件
GodKK老神灭2 小时前
STM32 变量存储
stm32·单片机·嵌入式硬件
木宁kk2 小时前
51单片机引脚功能概述
单片机·嵌入式硬件
JANYI20182 小时前
嵌入式MCU和Linux开发哪个好?
linux·单片机·嵌入式硬件
sword devil9004 小时前
Arduino快速入门
stm32·单片机·嵌入式硬件
GodKK老神灭4 小时前
STM32实现循环队列
stm32·单片机·嵌入式硬件