STM32单片机学习(24) —— 硬件I2C和软件I2C

文章目录

概述

  • 硬件I2C:基于单片机的I2C外设,让I2C外设帮助程序员完成I2C通信的时序控制,实现I2C通信,这种方式称之为硬件I2C。

  • 软件I2C:直接基于某两个普通引脚,用GPIO外设来模拟I2C通信的时许,实现I2C通信过程,这种方式称之为软件I2C

两种方式的特点

  1. 硬件I2C:
优势 不足
通信速率快,如果硬件I2C实现I2C通信,可以实现快速模式,400kHz的时钟线频率的通信速率,理论最大速率是44.44KB/s I2C外设使用很繁琐,实现通信的过程也很麻烦(相较于USART来说);另外需要使用固定的引脚,引脚使用不灵活

硬件I2C因外有外设的支持,所以也可以使用中断,这是软件I2C不具备的

  1. 软件I2C:
优势 不足
不使用固定引脚,可以选择任意两个普通IO引脚可实现I2C通信,软件I2C更加灵活 没有I2C外设的支持,单凭GPIO模拟实现通信时序,通信速率较慢,基本上链标准模式的通信速率都达不到(100kHZ)。

软件I2C为了避免软件模拟过程中的通信失败,需要加一些必要的时延来确保电平的稳定,或重组的时间进行数据发送接收

总的来讲,如果需要更快的的速率或者需要中断处理可以选择硬件I2C;而希望对引脚有更灵活的操作,就选择软件I2C。

两种方式的实现

  1. 软件I2C,基于任意两个普通IO模拟I2C通信的时序,这个时候,I2C通信的每一个小的过程,小步骤,都需要程序员代码来完成,所以需要程序员手动编写提供一个一个的时许控制函数。

比如:

  • 发送其实信号

  • 发送停止信号

  • 主机发送1Byte数据给从机

    ...

    ...

所以如果采用软件I2C,那么需要手动编写一个软件I2C模块,来实现一个个手动控制I2C时序的函数

编写玩这些时序控制函数以后,按照时序图,依照顺序调用这些时序控制函数,这样就实现I2C通信的时序结构,实现了I2C通信

  1. 如果是基于单片机的I2C外设,硬件实现I2C通信

    那么这些时序控制函数,就有ST公司提供的SPL库函数来实现

    程序只需调用对应的时序函数,即可实现硬件I2C通信

相关推荐
keyipatience10 分钟前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
WD137298015571 小时前
WD5030L,为充电桩、工业设备、5G 基站、车载系统、消费电子提供电源,7-30V 的宽压输入
stm32·单片机·嵌入式硬件·5g·车载系统·51单片机
xian_wwq2 小时前
【学习笔记】Milvus 如何完成一次向量相似度检索,Milvus 索引到底应该怎么选?-15
笔记·学习·milvus
Hhuhkt2 小时前
3D 云养宠小游戏
学习
创界工坊工作室3 小时前
30-基于STM32的小麦烘干塔温度控制系统设计
stm32·单片机·嵌入式硬件·proteus
Zwawa4 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
派大鑫wink4 小时前
纯前端实现软考中级·软件设计师备考学习网站
前端·学习
单片机仿真设计4 小时前
【proteus仿真设计】基于 STM32 的开荒机器人遥控控制系统设计(仿真图+程序)
stm32·嵌入式硬件·机器人·proteus
smartpi_ai4 小时前
51 单片机写好了,大模型语音怎么接?17T 全驱动的现成方案、双板串口分工的边界与画板前的三项硬件确认
单片机·嵌入式硬件·学习
我先去打把游戏先5 小时前
NimBLE是什么-ESP32蓝牙协议栈详解
单片机·嵌入式硬件·ubuntu