历史上的今天
返回首页

历史上的今天

今天是:2026年01月09日(星期五)

正在发生

2023年01月09日 | STM32的GPIO电路原理

2023-01-09 来源:zhihu

GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。

STM32的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚,比如串口。

GPIO基本结构

每个GPIO内部都有这样的一个电路结构,这个结构在本文下面会具体介绍。



保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。

P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。这里的电路会在下面很详细地分析到。

TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。ADC外设要采集到的原始的模拟信号。

这里需要注意的是,在查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V的。如果没有标注“FT”,就代表着不兼容5V。

STM32的GPIO工作方式

GPIO支持的输入输出模式:

GPIO_Mode_AIN 模拟输入

GPIO_Mode_IN_FLOATING 浮空输入

GPIO_Mode_IPD 下拉输入

GPIO_Mode_IPU 上拉输入

GPIO_Mode_Out_OD 开漏输出

GPIO_Mode_Out_PP 推挽输出

GPIO_Mode_AF_OD 复用开漏输出

GPIO_Mode_AF_PP 复用推挽输出

每个I/O口可以自由编程,但I/O口寄存器必须按32位字被访问。

下面将具体介绍GPIO的这八种工作方式:

浮空输入模式



浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。

上拉输入模式



上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平也还是低电平。

下拉输入模式



下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也还是高电平。

模拟输入模式



模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等等。

开漏输出模式



开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平。

开漏复用输出模式



开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

推挽输出模式



推挽输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经P-MOS管和N-MOS管,最终输出到I/O端口。这里要注意P-MOS管和N-MOS管,当设置输出的值为高电平的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定:高电平;当设置输出的值为低电平的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定:低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,此时I/O端口的电平一定是输出的电平。

推挽复用输出模式



推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

总结与分析

什么是推挽结构和推挽电路?

推挽结构一般是指两个参数相同的三极管或MOS管分别受两互补信号的控制,总是在一个三极管或MOS管导通的时候另一个截止。高低电平由输出电平决定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

开漏输出和推挽输出的区别?

开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);

推挽输出:可以输出强高、低电平,连接数字器件。

关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:



该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当比较器输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平。右边的则可以理解为开漏输出形式,需要接上拉。

在STM32中选用怎样选择I/O模式?

浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1

带上拉输入_IPU——IO内部上拉电阻输入

带下拉输入_IPD—— IO内部下拉电阻输入

模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电

开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能

推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的

复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL、SDA)

复用功能的开漏输出_AF_OD——片内外设功能(TX1、MOSI、MISO.SCK.SS)


推荐阅读

史海拾趣

柯爱亚(ceaiya)公司的发展小趣事

柯爱亚一直秉承“持续改进,满足客户要求,不断创新,超越客户期望”的品质方针。公司严格把控产品质量,从原材料采购到生产流程,再到产品检测,每一个环节都力求精益求精。这种对品质的坚持赢得了客户的信任,柯爱亚的产品逐渐在市场上树立了良好的口碑。

Arduino公司的发展小趣事

Arduino平台从一开始就秉持着开源和合作的理念。它的源代码、硬件设计和文档都是公开的,鼓励开发者们共同参与和贡献。这种开放的精神吸引了大量的开发者加入Arduino社区,共同推动Arduino平台的发展。同时,Arduino也与许多企业和机构建立了合作关系,共同推动电子行业的发展和创新。

Cavium Networks公司的发展小趣事

随着消费者对家庭娱乐和智能生活的需求不断增长,Cavium Networks 敏锐地捕捉到了这一市场趋势。公司推出了面向消费者市场的无线显示解决方案 WiVu,利用最新的笔记本电脑技术如嵌入式 DisplayPort 和显示迷你卡(DMC),为多房间和交互式应用提供了高性能的 Wi-Fi 无线显示解决方案。WiVu 的推出不仅满足了消费者对便捷、高效、高质量的娱乐体验的需求,也引领了市场的新潮流,进一步巩固了 Cavium Networks 在电子行业中的地位。

C&K公司的发展小趣事

为了进一步加强在全球市场的地位,C&K在2011年进行了一次重要的收购。这次收购不仅扩大了公司的业务范围,还提升了其设计和制造能力。通过这次收购,C&K得以在全球范围内提供更广泛的产品和服务,进一步巩固了其在电子行业中的领先地位。

Elekon Industries公司的发展小趣事

在快速发展的同时,Elekon也积极履行社会责任。公司注重环保和可持续发展,积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,Elekon还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Elekon的社会责任感,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构,旨在为您提供关于Elekon Industries公司发展起来的相关故事。如有需要,请参考公司官方发布的信息或相关新闻报道。

Bel Power Solutions公司的发展小趣事

在国内市场取得一定成绩后,Bel Power Solutions开始积极拓展国际市场。公司通过与全球知名企业的合作,成功将产品打入国际市场,并赢得了良好的声誉。同时,公司还积极寻求与系统集成商、分销商等建立长期稳定的合作关系,共同开拓市场。这些合作伙伴关系的建立,不仅为公司带来了更多的商业机会,还提升了公司的品牌影响力和市场份额。

问答坊 | AI 解惑

基于DSP和专用接口芯片的USB实现方案

引言   各种测量仪器检测到的数据常常需要传送到PC机进行数据处理与存档,以充分利用PC机丰富的硬件和软件资源,获得更为完善和强大的数据处理、分析和存储能力。传统PC平台的数据采集卡受PC机插槽数目、地址、中断等硬件和软件资源的限制,可扩 ...…

查看全部问答>

半导体产业:沉沦还是涅槃?

  半导体的耀眼光芒正在消逝。近日,普华永道中国2009半导体行业最新报告显示,长远看来,中国半导体消费市场已驶离高速发展的快车道,未来该行业的增长率将更接近全球平均水平。   对技术尚不过关、规模更无法与国外半导体公司相提并论的中国 ...…

查看全部问答>

2010年黑龙江省电子大赛讨论

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 2010年黑龙江省电子大赛即将开始,希望开出一个能够大家讨论的地方来~~  …

查看全部问答>

一个单片机控制多路LED问题,急。。。。。。。。

单片机来控制四路LED,每路有102个LED(三个LED和一个120的电阻串联为一组,组和组之间是并联) 需要单片机来控制各路呈现各种规律亮或者灭(单路同时亮或者同时灭),采用的开关电源是5V4A,12V1A的,不知道怎么接电路,请指教,在线等,急。。。 ...…

查看全部问答>

pda上防止软件破解, 测试结果如下

unsigned char* GetStroageID(LPCTSTR szDisk) { //HANDLE hDisk = CreateFile(_T(\"DSK1:\"), GENERIC_READ, FILE_SHARE_READ ? FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); HANDLE hDisk = CreateFile(szDisk, GENERIC_READ, FILE_S ...…

查看全部问答>

硬件菜鸟-2410板子,上电后不显示DNW信息

我按照下面的步骤, 1. 连接好串口线和电源线(未上电) 2. 启动DNW并且Connect,显示串口已经连接 3. 启动板子 问题:为什么我启动了板子以后不显示DNW的信息呢?而是直接启动了WinCE。我重新烧写了BIOS,但是还是不行。 请大虾们指教。…

查看全部问答>

LED背光技术十大领先优势

着液晶显示器市场的拉动,LED背光源产业呈现出一派繁荣景象。在显示技术水平上不断进步,巨大的LED市场注定将其发展成为一个庞大的产业。   经过多年的发展,LED显示屏行业中逐渐迈向成熟,在应用领域上也不断的拓宽。从近年统计数据来看,在国 ...…

查看全部问答>

在用STM8,马上发现现实的困难

用自己设计的图纸,发现封装太小,自己做板难度不小.外发打样,一个来回至少14天,周期太长. iar至今没找到和谐版,先用免费的那个.现在还在仿真环境里面,还没有绕出来.也不知道是开发板附带的st-link问题还是哪里有问题.去官网找资料,再次迷失在 ...…

查看全部问答>

Multisim11.0中没有的器件怎么办添加呢?

我想在里面添加TL494进行仿真   可我没在库里面找到呀   那位高手帮个忙   感激不尽啊   尽量详细点哈 谢谢!!…

查看全部问答>

【TI原创】基于LM3S8962的网络收音机(四) --- VS1053(2)

测试一下使用VS1053播放MP3的效果   1.  1.   使用自带的SD_Card例程,把MP3文件写在sd卡上 2.2.  增加vs1053驱动 3.3.   编写相关的应用程序   系统的理解效果图如下:     测试的 ...…

查看全部问答>