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 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
TST-魚爷1 小时前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
不昀3 小时前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵4 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯4 小时前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管
集芯微电科技有限公司5 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷5 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw6 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件
凯基迪科技6 小时前
瑞萨R5F100解密 R8C/RL78 MCU 固件读取与保护机制详解
服务器·网络·单片机
PMAOS7 小时前
4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法
嵌入式硬件·ai·操作系统