STM32入门系列-GPIO结构

最新更新时间:2022-11-18来源: zhihu关键字:STM32  入门系列  GPIO结构 手机看文章 扫描二维码
随时随地手机看文章

已经了解了STM32 GPIO的基本概念及引脚分类。现在来看下STM32 GPIO内部的结构是怎样的。IO端口位的基本结构如下图所示。

从图中可以看出GPIO内部结构还是比较复杂的,只要将这张GPIO结构图理解好,那么关于GPIO的各种应用模式将非常清楚。图中最右端I/O端口就是STM32芯片的引脚,其它部分都在STM32芯片内部。上图中我们将每部分都用红色数字标号了,按照顺序我们逐一讲解。

  • 保护二极管

引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于VDD_FT或VDD时,上方的二极管导通吸收这个高电压,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

尽管STM32芯片内部有这样的保护,但并不意味着STM32的引脚就无所不能,如果直接将引脚连接大功率器件,比如电机,那么要么电机不转,要么烧坏芯片。如果要驱动一些大功率器件,必须要加大功率及隔离电路驱动。也可以说STM32引脚是用来做控制,而不是做驱动使用的。

  • 上下拉电阻

从图中可以看到,上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开关,可以控制引脚的默认状态电平。当开启上拉时引脚默认电压为高电平,开启下拉时,引脚默认电压为低电平,这样就可以消除引脚不定状态的影响。当然也可以将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只有 1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式,使它有一个默认状态。STM32 上下拉及浮空模式的配置是通过GPIOx_CRL和GPIOx_CRH寄存器控制的,大家在《STM32F1xx中文参考手册》查阅。STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流,那么就需要外接上拉电阻了。

  • P-MOS和N-MOS管

GPIO引脚经过两个保护二极管后就分成两路,上面一路是“输入模式”,下面一路是“输出模式”。我们先讲输出模式,线路经过一个由P-MOS和N-MOS管组成的单元电路,这让GPIO引脚具有了推挽和开漏两种输出模式。所谓推挽输出模式,是根据P-MOS和N-MOS管的工作方式命名的。在该结构单元输入一个高电平时,P-MOS管导通,N-MOS管截止(可以将P-MOS当作NPN三极管,N-MOS当作PNP三极管来看就非常清楚),对外输出高电平(3.3V)。


在该单元输入一个低电平时,P-MOS管截止,N-MOS管导通, 对外输出低电平 (0V) 。如果当切换输入高低电平时,两个MOS管将轮流导通,一个负责灌电流(电流输出到负载),一个负责拉电流(负载电流流向芯片),使其负载能力和开关速度都比普通的方式有很大的提高。下图为推挽输出模式的等效电路。



在开漏输出模式时,不论输入是高电平还是低电平,P-MOS 管总处于关闭状态。当给这个单元电路输入低电平时,N-MOS 管导通,输出即为低电平。当输入高电平时,N-MOS 管截止,这个时候引脚状态既不是高电平,又不是低电平,我们称之为高阻态。如果想让引脚输出高电平,那么引脚必须外接一个上拉电阻,由上拉电阻提供高电平。开漏输出模式等效电路图如下图所示。



在开漏输出模式中还有一个特点,引脚具有“线与”关系。就是说如果有很多个开漏输出模式的引脚接在一起,只要有一个引脚为低电平,其他所有管脚都为低,即把所有引脚连接在一起的这条总线拉低了。只有当所有引脚输出高阻态时这条总线的电平才由上拉电阻的 VDD 决定。如果 VDD 连接的是 3.3V,那么引脚输出的就是 3.3V,如果 VDD 连接的是 5V,那么引脚输出的就是 5V。因此如果想要让 STM32 管脚输出 5V,可以选择开漏输出模式,然后在外接上拉电阻的电源 VDD 选择 5V 即可,前提是这个 STM32 引脚是容忍 5V 的。开漏输出模式一般应用在 I2C、SMBUS 通讯等需要“线与”功能的总线电路中。还可以用在电平不匹配的场合中,就如上面说的输出 5V 一样。


推挽输出模式一般应用在输出电平为0-3.3V而且需要高速切换开关状态的场合。除了必须要用开漏输出模式的场合,我们一般选择推挽输出模式。要配置引脚是开漏输出还是推挽输出模式可以使用GPIOx_CRL和GPIOx_CRH寄存器, 寄存器详细内容可以参考《STM32F1xx 中文参考手册》“通用和复用I/O(GPIO和AFIO)”章节。

  • 输出数据寄存器

前面提到的双 MOS 管结构电路的输入信号,是由 GPIO“输出数据寄存器GPIOx_ODR”提供的, 因此我们通过修改输出数据寄存器的值就可以修改GPIO引脚的输出电平。而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存器的值从而影响电路的输出。

  • 复用功能输出

由于STM32的GPIO引脚具有第二功能,因此当使用复用功能的时候,也就是通过其他外设复用功能输出信号与GPIO数据寄存器一起连接到双MOS管电路的输入,其中梯形结构是用来选择使用复用功能还是普通IO口功能。例如我们使用USART串口通讯时,需要用到某个GPIO引脚作为通讯发送引脚,这时候就可以把该GPIO引脚配置成USART串口复用功能, 由串口外设控制这个脚,发送数据。

  • 输入数据寄存器

输入数据寄存器是由IO口经过上下拉电阻、肖特基触发器引入。当信号经过触发器,模拟信号将变为数字信号0或1,然后存储在输入数据寄存器中,通过读取输入数据寄存器GPIOx_IDR就可以知道IO口的电平状态。

  • 复用功能输入

此模式与前面讲解的复用功能输出类似。在复用功能输入模式时,GPIO引脚的信号传输到STM32其他片上外设,由该外设读取引脚的状态。同样,如我们使用USART串口通讯时,需要用到某个GPIO引脚作为通讯接收引脚,这个时候就可以把该GPIO引脚配置成USART串口复用功能, 使USART可以通过该通讯引脚的接收远端数据。

  • 模拟输入输出

当GPIO引脚用于ADC采集电压的输入通道时,用作“模拟输入”功能,此时信号是不经过施密特触发器的, 因为经过施密特触发器后信号只有0、1两种状态,ADC外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。类似地,当GPIO引脚用于DAC作为模拟电压输出通道时,此时作为“模拟输出”功能,DAC的模拟信号输出就不经过双MOS管结构了,模拟信号直接通过管脚输出


关键字:STM32  入门系列  GPIO结构 编辑:什么鱼 引用地址:STM32入门系列-GPIO结构

上一篇:STM32入门系列-创建寄存器模板
下一篇:STM32入门系列-GPIO概念介绍

推荐阅读

意法半导体发布STM32C0系列MCU 让成本敏感的8位应用也能享受32 位性能
意法半导体发布STM32C0系列MCU让成本敏感的8位应用也能享受32 位性能STM32系列高性价比入门级产品,现已量产并发货,享受 10 年产品寿命保障2023年1月31日,中国 ---- 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)推出迄今为止STM32 微控制器 (MCU)产品家族中性价比最高的STM32C0系列产品,为开发者降低STM32入门门槛。全球已有数十亿个智能工业、医疗和消费产品采用STM32 MCU。STM32现有产品型号达数千种,让产品设计人员总能选到价格适中、功能和性能皆满意的产品。在保障供货的同时,意法半导体将新的 STM32C0 系列定位于家用
发表于 2023-01-31
意法半导体发布STM32C0<font color='red'>系列</font>MCU  让成本敏感的8位应用也能享受32 位性能
学习STM32日志——简单外部中断
STM32支持19个外部中断和事件请求,其中线0~15映射对应IO口的输入中断。每个线同时最多只能映射一个IO口。映射关系而中断服务函数只有7个。线5-9共用一个,10到15共用一个。下面是配置步骤。开始自己编写一个程序,通过两个按键的按下来触发中断,一个按键接地,端口设置为上拉状态,触发模式为下降沿触发;另一个按键接VCC,端口设置为下拉状态,触发模式为上升沿触发。然后在中断服务函数中编写触发中断后要执行的函数。一个为切换LED的亮灭状态,另一个控制蜂鸣器的通断。在调试过程中,出现了按键按下但会偶尔失灵,既不触发中断的现象,经过半个小时的找原因,发现因为粗心,将接地按键的触发模式设置为下降沿,而将接VCC按键的触发模式设置为上升沿
发表于 2023-01-31
学习STM32日志——独立看门狗实验
继续更新学习STM32的历程,今天学习看门狗。在单片机构成的微型计算机系统中,单片机的工作时常收到外界电磁场的干扰,导致程序跑飞,陷入死循环。为了解决这个问题,产生了一种用于监测单片机程序运行状态的模块或芯片,叫做看门狗(WatchDog),而这个东西已经集成在STM32芯片内部。它能在系统跑飞的情况下将系统复位,重新执行程序。STM32有两个看门狗,一个是窗口看门狗,由APB1时钟分频后得到的时钟驱动;另一个是独立看门狗,由专用的低速时钟(LSI)驱动,它是由内部的RC振荡器产生的,约为40KHZ,即使主时钟发生故障它仍然有效。看门狗的原理是:当我们使能看门狗时(往键值寄存器IWDG_KR写入0xCCCC实现),12位的计数器就会
发表于 2023-01-31
STM32学习日志——窗口看门狗实验
程序的调试有时候很令人头痛,但找出原因并解决的一刻是真的爽。下午继续STM32的学习,接下来是窗口看门狗实验,之所以叫做窗口,是因为它的喂狗时间有一个上下限范围,可以通过寄存器去配置。而它的下限是固定的,为0x3F(0x001111111),上限通过寄存器WWDG_CFR配置,如果在上限之前喂狗则会复位,到达下限后系统也会自动复位。从看门狗框图中可以看出,复位的与门输出要为1,则两个输入必须都为1,说明WDGA启动位必须置1,或门的输出也要为1这两个条件必须满足。而要想或门的输出为1,有两个条件之一满足即可,1)T6为0,即0x40减至0x3F的一瞬间触发复位。2)比较器的输出为1,即T6:0>W6:0,也就是计数器的当前值比
发表于 2023-01-31
STM32学习日志——定时器中断实验
今天学习的是通用定时器及其中断,首先是内部时钟的选择,定时器的时钟Tclk是由APB1时钟乘以1或2决定的,至于是1还是2,要看APB1的分频系数(AHB/APB1),如果为1,则乘以1,否则乘以2。接着就可以根据我们想设定的时间Tout,去配置ARR跟PSC,这两个数是存在16位的寄存器,所以他们的范围为(0-65535),在这个范围内任意取值,满足公式即可。如果我么要配置500ms,可将ARR配置为2499,PSC配置为14399。也就是定时器计数的一个周期为500ms。(ARR为自动重装载值,PSC为Tclk的预分频系数)根据步骤去写程序就很简单了。实现功能:通过定时器的中断控制一个绿灯翻转,时间为500ms,主函数一个红灯以
发表于 2023-01-31
<font color='red'>STM32</font>学习日志——定时器中断实验
STM32学习日志——PWM输出实验
今天学习的是通用定时器的比较输出功能,也就是PWM;从它的工作过程图中很容易看出,就是计数器与比较值CCRx作比较,可以产生对应的IO口逻辑。而具体的对应关系需要对相应的寄存器进行配置。1)首先是选择工作模式,即对CCMR1的OC1M[2:0]配置,模式1是计数器小于比较值为有效电平,模式2是计数器大于比较值为有效电平。2)其次配置输出极性,0为高电平有效,1为低电平有效。3)使能比较输出。在频率确定的情况下(上一节课有提到,通过预分频系数来设定),PWM的周期是由ARR自动重装载确定,占空比是由CCRx确定,通过对这两个参数的修改,就可以得到我们想要的脉冲波。根据下面的步骤就可以输出PWM,因为使用的是PB5端口,所以需要开启TI
发表于 2023-01-31
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved