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通信

相关推荐
一路往蓝-Anbo1 小时前
第三篇:ADC 与模拟前端
stm32·嵌入式硬件·嵌入式·硬件设计
努力小周4 小时前
STM32智能安防系统
c语言·stm32·单片机·嵌入式硬件·物联网·计算机网络·pcb工艺
袁小皮皮不皮5 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
装不满的克莱因瓶5 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
清辞8536 小时前
产品经理需求推进流程
大数据·深度学习·学习·产品经理
华科大胡子6 小时前
在STM32上跑通TinyML
stm32·单片机·嵌入式硬件
YM52e6 小时前
鸿蒙PC ArkTS 声明合并问题深度解析与最佳实践
学习·华为·harmonyos·鸿蒙·鸿蒙系统
海兰7 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
iCxhust7 小时前
C#进程管理程序
开发语言·汇编·stm32·单片机·c#·微机原理
ken22328 小时前
在 Libreoffice Calc中输入自定义表情字符时,需要保存之后,才能正常显示
学习