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期间,变换电平来传输数据。

相关推荐
弥途18 分钟前
半导体、晶体管、集成电路、芯片、CPU、单片机、单片机最小系统、单片机开发板-概念串联辨析
单片机
Whappy0011 小时前
5.STM32之通信接口《精讲》之USART通信---实验串口接收程序
stm32·单片机·嵌入式硬件
文弱书生6563 小时前
TIM输入捕获
stm32·单片机·嵌入式硬件
飞凌嵌入式7 小时前
飞凌嵌入式旗下教育品牌ElfBoard与西安科技大学共建「科教融合基地」
嵌入式硬件·学习·嵌入式·飞凌嵌入式
weixin_452600698 小时前
【青牛科技】电流模式PWM控制器系列--D4870
科技·单片机·嵌入式硬件·音视频·智能电表·白色家电电源·机顶盒电源
嵌新程11 小时前
day06(单片机高级)PCB设计
单片机·嵌入式硬件·pcb
stm 学习ing11 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
LateBloomer77714 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
wenchm15 小时前
细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
stm32·单片机·嵌入式硬件