【stm32芯片设置解惑】:stm32F103系列的开漏输出和推挽输出的区别

本文主要是介绍【stm32芯片设置解惑】:stm32F103系列的开漏输出和推挽输出的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景:

        大家在开发stm32的时候,不管是标准库开发还是hal库开发,最基础的就是芯片引脚的某某设置,为什么这么设置?这样设置的好处是什么?


问题描述 — 开漏输出和推挽输出的用处和区别

  1. 什么是开漏输出?

        答:开漏输出(Open-Drain Output)是指输出引脚可以连接到负载(通常是电阻和/或其他器件),但无法提供高电平(高电压)信号。

        开漏输出只能提供低电平(低电压)信号,当输出为低电平时,输出引脚与地相连,形成一个开路;当输出为高电平时,输出引脚与负载断开,形成一个开路。因此,要在开漏输出上获取高电平信号,需要通过外部上拉电阻将输出引脚连接到电源电压。

  1. 什么是推挽输出?

        答:推挽输出(Push-Pull Output)是指输出引脚可以提供高电平和低电平信号。推挽输出可以驱动输出引脚的电平从电源电压端(高电平)到地(低电平)进行切换。

        在推挽输出中,输出引脚通过晶体管或集成电路内部的开关元件,可以将电流传递到负载或将电流从负载中断开。这种输出方式可以提供更大的输出电流能力,通常用于驱动较大的负载或需要提供双向电平切换的应用。

        开漏输出只能提供低电平信号,需要外部上拉电阻来获取高电平信号;而推挽输出可以提供高电平和低电平信号,可以直接驱动负载。

优缺点:

开漏输出的优点包括:

  1. 允许多个输出引脚连接到同一个总线上,形成开漏总线。这种配置下,多个设备可以共享总线并以开漏方式输出信号,通过外部上拉电阻实现总线的高电平状态,而每个设备可以通过开漏输出引脚控制总线的低电平状态。这样可以实现多个设备之间的数据传输和协作。

  2. 可以实现电平转换。开漏输出可以与不同电压的设备或电路连接,只需通过适当的上拉电阻即可将输出引脚的信号电平转换为目标电压水平。

  3. 具有较高的抗干扰能力。由于开漏输出在输出低电平时形成一个开路,因此对于外部噪声和干扰信号具有较好的抑制能力。

推挽输出的优点包括:

  1. 可以提供高电平和低电平信号。推挽输出可以直接驱动负载,无需外部上拉电阻。这使得推挽输出更加方便和灵活,特别适用于需要直接控制负载的应用。

  2. 具有较高的输出驱动能力。推挽输出可以提供较大的输出电流,能够驱动较大的负载,如电机、继电器等需要较高电流的设备。

  3. 可以提供更高的输出速度。由于推挽输出具有主动驱动能力,可以快速切换输出电平,适用于需要高速信号传输或需要快速响应的应用。

然而,推挽输出也存在一些缺点:

  1. 推挽输出不能直接形成开漏总线,因为无法提供开漏模式的输出。如果需要实现开漏总线的功能,需要使用其他器件或电路来实现。

  2. 在一些特殊的应用场景中,推挽输出可能会产生较多的功耗,因为在切换输出电平时会有瞬间的电流流动,导致功耗增加。

应用场景:

开漏输出的应用场景包括:

  1. 总线通信:开漏输出可以用于实现多个设备之间的通信总线,例如I2C和SPI等串行通信协议。多个设备可以通过开漏输出引脚共享总线,并通过外部上拉电阻实现总线的高电平状态。

  2. 开关控制:开漏输出可以用于控制开关或触发器等外部器件。通过开漏输出引脚的开路和闭路状态,可以控制外部电路中的开关状态。

  3. 多路选择:开漏输出可以用于多路选择器的控制信号。通过多个开漏输出引脚,可以选择连接到特定输入的信号源。

  4. 电平转换:开漏输出可以用于不同电压之间的电平转换。通过适当的上拉电阻,可以将开漏输出引脚的信号电平转换为目标电压水平。

推挽输出的应用场景包括:

  1. 数字信号驱动:推挽输出可以用于驱动数字信号的负载,例如LED灯、继电器、电机等。推挽输出可以提供足够的输出电流来驱动这些负载。

  2. 并行总线:推挽输出可以用于并行总线的实现,例如数据总线和地址总线。多个推挽输出引脚可以同时提供高电平和低电平信号,实现并行数据传输。

  3. 脉冲信号:推挽输出可以用于生成脉冲信号,例如时钟信号、触发信号等。推挽输出可以快速切换输出电平,实现精确的时间控制。

  4. 驱动高负载:推挽输出具有较高的输出电流能力,适用于需要驱动较大负载的应用,如电机驱动、功率放大器等。

需要根据具体的电路设计要求和应用需求来选择适当的输出模式,开漏输出和推挽输出在不同的应用场景中发挥着重要的作用。


GPIO八种模式:

 

        具体的还需大家自行探索,去实际的体验一下,各个方式的区别和好处。


长风破浪会有时,直挂云帆济沧海

这篇关于【stm32芯片设置解惑】:stm32F103系列的开漏输出和推挽输出的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167403

相关文章

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`

Python中json文件和jsonl文件的区别小结

《Python中json文件和jsonl文件的区别小结》本文主要介绍了JSON和JSONL两种文件格式的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 众所周知,jsON 文件是使用php JSON(JavaScripythonpt Object No

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也