STM32的GPIO模式设置两只三极管常见组合电路

2023-10-10 14:59

本文主要是介绍STM32的GPIO模式设置两只三极管常见组合电路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、STM32的GPIO模式设置
    • 1.STM32的GPIO八种模式及选择
    • 2.八种模式对应的电路图
  • 二、两只三极管
    • 1.串接组合成达林顿管
    • 2.并接组合成输出电路
  • 总结


前言

读书破万卷,下笔如有神----杜甫

STM32的GPIO八种模式设置起来很简单,根据使用GPIO是需要输入还是输出来确定,一行代码即可设置一种模式。通常,我们只需会调用代码即可,无需深究其实现电路,但对于还没学过模数电的可以稍微学习一下。此外,本文还讲解了两只三极管的“爱情故事”,即两只三极管六只引脚的不同组合会形成哪几种有用的电路。


一、STM32的GPIO模式设置

1.STM32的GPIO八种模式及选择

首先在标准固件库里的stm32f10x_gpio.h文件里可以找到八种模式的枚举定义:

typedef enum
{ GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

由输入和输出两大类可分为:
4种输出模式:
普通推挽输出(GPIO_Mode_Out_PP )、普通开漏输出 (GPIO_Mode_Out_OD)及复用推挽输出(GPIO_Mode_AF_PP )、复用开漏输出(GPIO_Mode_AF_OD )。
4种输入模式:
上拉输入(GPIO_Mode_IPU ) 、下拉输入模式(GPIO_Mode_IPD )、浮空输入模式(GPIO_Mode_IN_FLOATING) 模拟输入模式(GPIO_Mode_AIN )。

显然,这些模式对应的电路和功能大多数学过模电的人都记得滚瓜烂熟,所以这里重温一下这些模式的适用场合。
见名知意:
普通推挽输出(GPIO_Mode_Out_PP ):一般应用在输出电平为 0 和 3.3 伏,在STM32 使用GPIO来输出时,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式,如点灯操作。与51单片机的引脚相比,此模式可以高速切换高低电平状态。
复用推挽输出(GPIO_Mode_AF_PP ):输出电平效果同上,但此模式用于STM32 的其它片上外设对 GPIO 引脚进行控制,此时 GPIO 引脚用作该外设功能的一部分。

普通开漏输出 (GPIO_Mode_Out_OD):该引脚具有“线与”特性,即有很多个开漏模式引脚连接到一起时,若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平。当所有线与器件都为高阻态或者高电平时,该线路才为高电平。相当于51单片机的P0引脚。
复用开漏输出(GPIO_Mode_AF_OD ):输出电平效果同上,同样,此模式也是用于用于STM32 的其它片上外设对 GPIO 引脚进行控制。

上拉输入(GPIO_Mode_IPU ) :该引脚默认对外显示高电平,故默认读入也是高电平。
下拉输入(GPIO_Mode_IPD ):该引脚默认对外显示低电平,故默认读入也是低电平。

浮空输入(GPIO_Mode_IN_FLOATING) :浮空输入的电平是不确定的,完全由外部的输入决定,一般检测按键的时候用的是这个模式。
模拟输入(GPIO_Mode_AIN ): GPIO 引脚用于 ADC 采集电压的输入通道时使用此模式,此引脚得到得是未经处理的原始电压。

那么问题来了,如何知道某些功能(设备通信)使用的GPIO引脚要使用哪一种模式呢?
在这里插入图片描述
当然是查看STM32F10x–中文参考手册中8.1.11外设的GPIO配置一栏,这里只copy了几个常见的通信功能的GPIO配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.八种模式对应的电路图

到这里就差不多了吧。
在这里插入图片描述
其实对于很多人而言,看到这里基本上已经可以解决编程的问题了,已经可以正确选择GPIO的模式了,以至于可以不了解对应的电路图都行,因为没必要啊😁。所以接下来的内容,大家随便看一看就行了。

同样是查看STM32F10x–中文参考手册中8.1中出现下图:
在这里插入图片描述
此图清晰的描绘了一个GPIO引脚的基本结构概念图,由图可知,通过选择开关可以使该引脚得到8种不同的功能。
以下为STM32F10x–中文参考手册中8.1中原文,清晰地说明了不同模式下,图中各个器件的动作:

当I/O端口配置为输入时:
● 输出缓冲器被禁止
● 施密特触发输入被激活
● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 对输入数据寄存器的读访问可得到I/O状态

当I/O端口被配置为输出时:
● 输出缓冲器被激活
─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。
─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。

当I/O端口被配置为复用功能时:
● 在开漏或推挽式配置中,输出缓冲器被打开
● 内置外设的信号驱动输出缓冲器(复用功能输出)
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
● 开漏模式时,读输入数据寄存器时可得到I/O口状态
● 在推挽模式时,读输出数据寄存器时可得到最后一次写的值

当I/O端口被配置为模拟输入配置时:
● 输出缓冲器被禁止;
● 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置
为’0’;
● 弱上拉和下拉电阻被禁止;
● 读取输入数据寄存器时数值为’0’。

好吧,匆匆瞄过上文,接着便开始正文了😀。

二、两只三极管

众所周知,三极管分为N型和P型,一只三极管有3个引脚,当用于放大作用时,发射结正偏,集电结反偏。当用作开关作用时,发射结正偏,集电结正偏。。。。以下谈论都使用双极性三极管举例。先问大家2个问题:就单纯的连线把两只三极管连接起来有多少种组合?你学习过哪几种组合呢?
显然,由排列组合可知,考虑其中的一只三极管的3个引脚,每一个引脚可以选择另一个的B,C,E任一脚,当然还可以选择悬空,有2X3X4=24种,使两个管子分离的连接:1种,再考虑三极管P型和N型号,有4种组合,综上,两只三极管共有(24-1)X4=92种连接。。(不知道是不是这样计算的🤣,不过反正组合有很多种)
在这里插入图片描述
可以把这些组合分为串接和并接两大类,下面来看一下其中有实际用途的组合:(在模电书中都可以找到)

1.串接组合成达林顿管

达林顿管是两个三极管接在一起,极性只认前面的三极管。
在这里插入图片描述
复合管组成原则:
在正确的外加电压下,每只晶体管均工作在放大区。
第1个元件的集电极电流或射极电流作第2个元件的基极电流,电流方向一致。
等效晶体管的类型是第一个原件的类型。
复合管的特性:
高电流增益; 
电压增益约等于1(小于1); 
高输入阻抗; 
低输出阻抗; 
放大倍数等于两管之积,漏电流影响极大,造成电路不稳定。

串接主要使用到其叠加起来的电流特性,做出大功率的复合(功率)管。

2.并接组合成输出电路

请看下图:
在这里插入图片描述

这几个电路是不是感觉很熟悉,从左到右依次是:乙类功率放大器,TTL与非门,上N下P型推挽电路,上P下N型推拉电路。

乙类功率放大器:
两只三极管在无驱动信号时,处于低电流状态,当加上驱动信号时,一对管子中的一只在半周期内电流上升,而另一只管子则趋向截止,到另一个半周时,情况相反,由于两管轮流工作,必须采用推挽电路才能放大完整的信号波形。(注意是放大信号)优点是效率较高(模电考试内容将优点二字改为其特点,注意别填成甲乙类功放去了!!!),理论上可达78%,缺点是失真较大。

TTL与非门的输出级:
输出级有较强的负载能力,为此将三极管的集电极负载电阻Rc换成由三极管T4、二极管D和Rc4组成的有源负载。由于T3和T4受两个互补信号Ve2和Vc2的驱动,所以在稳态时,它们总是一个导通,另一个截止。这种结构,称为推拉式输出级。(注意是当做开关来使用)

关于后两种电路的区别和联系,大家可以参考电子大佬的文章,我直接粘贴出其结论:
在这里插入图片描述
大家可以回过头看一下STM32的GPIO采用推挽输出是哪一种。。。

在这里插入图片描述
这里区分几个概念,细心地人已经发现:
推挽输出: 推挽电路使用两个参数相同的三极管,以并接方式存在于电路中,其中他们的射极连接成输出端。电路工作时,两只对称的三极管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。

互补输出: 互补电路也是一种推挽功放电路,不同之处是互补电路用两种极性不同的晶体管,各自工作在输入信号的正、负半周,所以不再需要倒相电路进行倒相。而用同极性晶体管构成的推挽功放,则需要倒相电路来得到两个幅度相等、相位相反的推动信号。

推拉输出: 以并接方式存在于电路中,其中他们的集电极连接成输出端。其实质只有一只管子起到开关作用,另一只作为其有源负载,推拉式输出级既提高电路的负载能力,又提高开关速度。


总结

没有任何的计算,没有电路的具体分析,大体上还是浅显易懂的。其实这是我早就想写出来的文章,因为去年复习模数电时,遇到很多长得差不多的电路图,就比如这里的几个输出级电路,当时还是比较懵逼的,明明就两只三极管,为此也查看了一些大佬的文章,颓然发现不是电路图难,原来是我太菜了😅。。。看来还是要多多学习啊,反正知识学到了就是自己的东西了,别人也拿不去,何乐而不为呢。

问大家一个问题:在梦里梦到一个好几年不见的人代表着什么?

这篇关于STM32的GPIO模式设置两只三极管常见组合电路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf