本文主要是介绍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模式设置两只三极管常见组合电路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!