4.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!

接下正式,进入软件编写IIC时序了,并实现对MPU6050的控制,既然是软件实现,那么硬件方面,我仅需两根控制线即可,即:数据控制线SDA,时钟控制线SCL。(人为软件层面定义的,就是把单片机的GPIO模拟成IIC时序)在单片机上,我们只需两个普通的GPIO即可。

(软件实现IIC的好处就是端口不受限,可以任意指定)

可以参考51单片机-IIC实验1-AT24C02数据存储(实战1)_51使用iic模块-CSDN博客https://blog.csdn.net/qq_58662017/article/details/142199565?spm=1001.2014.3001.5501

座右铭:我们何必为人生的部分片段而哭泣,我们整个人生都催人泪下!

目前实现的逻辑是STM32是主机,MPU6050是从机,一主一从。如下图(主机对SCL完全掌控在写程序的过程中我们一般只关注主机端的程序。

程序主框架,编写IIC时序,然后利用IIC对MPU6050进行写寄存器和读寄存器。最后,在主函数里调用一下即可!(主函数主要实现初始化,拿到数据,和打印数据)

开漏输出(Open-Drain 或 Open-Collector)是单片机或其他数字电路中常用的一种输出方式,它可以通过合理的电路设计实现输入功能。以下是详细说明:


问题1:开漏输出,可以输入吗?

开漏输出的工作原理

  • 开漏输出特点

    1. 当输出为低电平(逻辑0)时,开漏输出内部的 MOSFET 或晶体管导通,输出直接拉低至地(GND)。
    2. 当输出为高电平(逻辑1)时,内部 MOSFET 或晶体管断开,输出处于高阻态(悬空状态),需要通过外部上拉电阻将输出电平拉高。
  • 电路结构: 开漏输出电路没有直接的 "高电平" 驱动能力,必须依赖外部上拉电阻将输出端拉到高电平电压(如 3.3V 或 5V)。


开漏输出是否可以作为输入?

可以实现输入功能,但需要特定的电路设计。

1. 直接作为输入
  • 如果开漏输出端口本身的电路允许双向通信(如 I2C 总线),它可以接收来自其他设备的信号。
  • 在这种情况下:
    • 当开漏输出为高阻态时,端口可以感知外部输入信号(如其他设备的驱动信号或电压变化)。
    • 当开漏输出为低电平时,它会主动拉低信号线。
2. 需要外部电路支持
  • 如果开漏端口不直接支持输入,可以通过额外的硬件设计(如与其他电路连接)实现输入功能。典型方法包括:
    • 外部上拉电阻与驱动器相结合,输入信号可以通过上拉电阻的电压水平反映到开漏输出端。
    • 使用外部电路,如电平转换器或双向驱动芯片,将开漏端与输入信号连接。
3. I2C 典型例子
  • I2C 总线是一种开漏输出的经典应用。I2C 中的 SDA(数据线)和 SCL(时钟线)通过外部上拉电阻实现双向数据通信:
    • 在设备 "发送" 数据时,单片机通过开漏端口主动拉低 SDA 线。
    • 在设备 "接收" 数据时,单片机的开漏端口进入高阻态,从而允许外部设备驱动 SDA 线。

注意事项

  1. 上拉电阻的选择

    • 电阻值太大:信号线的上升时间变长,影响高速通信。
    • 电阻值太小:消耗过多电流,降低电路能效。
    • 一般情况下,推荐使用 4.7kΩ ~ 10kΩ 的电阻。
  2. 输入电压范围

    • 确保外部输入信号的电压范围在单片机的输入电平(如 0V ~ VCC)之内,以避免损坏器件。
  3. 避免冲突

    • 如果多个设备连接到开漏输出引脚,必须确保这些设备不会同时主动拉低信号线(避免驱动冲突)。

总结

开漏输出引脚可以实现输入功能,特别是在需要双向通信的场景(如 I2C 总线)。关键在于设计合理的外部电路,包括适当的上拉电阻,并确保输入信号的电压范围和驱动能力与开漏端口兼容。

代码实现:

软件初始化IIC:(也就是IIC的基本6个操作基本单元)

起始条件,终止条件,读一个字节,写一个字节,接收应答位,不接受应答位。

通过下面6张图,可以看出,分离设计,也就是在SCL期间:SDA如果改变电平,则就会产生开始或停止的信号(即:SCL=1 ,SDA从高到底就是开始信号,SDA从低到高就是停止信号),反之,就会使传输数据的过程,即:就是在SCL=0期间,变换电平来传输数据。

相关推荐
越甲八千1 小时前
windows调用C++动态库BOOL未定义
c++·windows·单片机
v先v关v住v获v取1 小时前
模块机器人逆向设计cad5张+三维图+设计说明书
科技·单片机·51单片机
SystickInt1 小时前
上电复位、掉电复位MOS管
单片机·嵌入式硬件
Arciab1 小时前
51单片机__LED相关
单片机·嵌入式硬件·51单片机
码咔吧咔2 小时前
STM32 系列 MCU 常见接口类型
stm32·嵌入式硬件
点灯小铭2 小时前
基于单片机的智慧校园自动打铃系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
电子科技圈5 小时前
芯科科技出展CES 2026并展出如何加速互联智能的未来
科技·嵌入式硬件·mcu·物联网·iot
点灯小铭10 小时前
基于单片机的多路热电偶温度监测与报警器
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
tianyue10014 小时前
STM32G431 ADC 多个channel 采集
stm32·单片机·嵌入式硬件
longson.15 小时前
怎样避免空间碎片而且高效的分配空间
嵌入式硬件·缓存