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

相关推荐
monkeyhlj9 小时前
Harness理解学习
java·人工智能·python·学习·ai编程
tryqaaa_9 小时前
学习日志(三)【php语法学习,iscc校赛wp】
android·网络协议·学习·安全·web安全·web
资深流水灯工程师9 小时前
嵌入式系统中的环形缓冲区:原理、应用与 STM32 实现
网络·stm32·嵌入式硬件
星夜夏空9910 小时前
STM32单片机学习(16) —— 中断相关概念
stm32·单片机·学习
余生皆假期-10 小时前
配置 CodeX 环境的 Simlink AI 工具链
笔记·单片机·嵌入式硬件·算法
KobeSacre10 小时前
UML 学习
学习·uml
嵌入式-老费10 小时前
esp开发与应用(1602液晶显示屏)
单片机·嵌入式硬件
嵌入式小站10 小时前
STM32 临界区是什么:为什么有时候要用 __disable_irq() 保护变量
chrome·stm32·嵌入式硬件
leo_jk10 小时前
STM32单片机 空闲中断
stm32·单片机·嵌入式硬件