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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同