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

主机发送





主机接收

相关推荐
就叫飞六吧2 小时前
普中stm32大Dap烧录流程
stm32
A9better2 小时前
嵌入式开发学习日志38——stm32之看门狗
stm32·嵌入式硬件·学习
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机智能路灯控制系统
c语言·stm32·单片机·嵌入式硬件·51单片机
辰哥单片机设计12 小时前
TT直流减速电机(STM32)
stm32
A9better12 小时前
嵌入式开发学习日志36——stm32之USART串口通信前述
stm32·单片机·嵌入式硬件·学习
思诺学长13 小时前
BMS(电池管理系统)的主要功能和架构简述
单片机·嵌入式硬件
czhaii13 小时前
全局不关总中断的 RTOS / CosyOS-II for STCAI MCU
单片机
qq_4017004113 小时前
STM32低功耗Tickless模式
stm32·单片机
研猛男15 小时前
0、FreeRTOS编码和命名规则
笔记·stm32·freertos
点灯小铭15 小时前
基于单片机的自动存包柜设计
数据库·单片机·mongodb·毕业设计·课程设计