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

相关推荐
糖糖单片机设计41 分钟前
STM32 老人跌倒监测报警系统
stm32·单片机·嵌入式硬件
小雨笙笙1 小时前
机器学习:线性回归学习
学习·机器学习·线性回归
HugoStudio_SWAN1 小时前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
是隼人1 小时前
buuctf-pwn [HarekazeCTF2019]baby_rop2(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
智闲电子设计2 小时前
STM32 硬件 CRC 与 UID 实战:固件校验防变砖,UID 防抄板,这两个外设白用太可惜
stm32·单片机·嵌入式硬件
嵌入式阿蔡2 小时前
CoAP / LwM2M 轻量协议:受限设备为什么不用 MQTT
单片机·物联网·嵌入式
aprilaaaaa3 小时前
(TC397 学习笔记)二、ICU和TIM的时钟计算
笔记·学习·fpga开发
wuyk5553 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
hongmai6668883 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
雾削木3 小时前
GPIO基本概念
单片机·嵌入式硬件