0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

GPIO(一)介绍和工作模式

修罗 2025-08-18 1263 6条评论 stm32

首页 / 正文

GPIO(一)介绍和工作模式

1.1 GPIO概述

​ GPIO(General-purpose input/output),通用型输入输出。简单理解就是我们可以控制输入输出的STM32引脚,统称为GPIO。

​ GPIO存在的意义就是用程序控制或读取它们的输出或输入

1.2 GPIO总体说明

​ STM32有多组GPIO,比如我们使用的芯片:STM32F103ZET6共有7组GPIO端口,他们分别是GPIOx(x从A-G),每组控制16个引脚,共有112个GPIO引脚。具体一个其他STM32芯片有多少组GPIO,可以去查看他们的对应的数据手册。

每个引脚的电平是0-3.3V,部分引脚最高可以兼容到5V。

1.2.1 GPIO的主要特点

  1. 不同型号,IO口的数量可能不一样;
  2. 快速翻转(GPIO 引脚电平在高/低之间来回切换)。最快可以达到每2个时钟周期翻转一次。(STM32F1系列最快可以达到50MHz的翻转速度);
  3. 每个IO都可以作为外部中断;
  4. 支持8种工作模式;

1.2.2 GPIO的8种工作模式

​ GPIO端口的每个位(引脚)可以由软件分别配置成8种模式,当然对同一个引脚同一时间只能处于某一种模式中。

  1. 输入浮空(Input floating)
  2. 输入上拉(Input pull-up)
  3. 输入下拉(Input-pull-down)
  4. 模拟输入(Analog)
  5. 通用开漏输出(Output open-drain)
  6. 通用推挽式输出(Output push-pull)
  7. 推挽式复用功能(Alternate function push-pull)
  8. 开漏复用功能(Alternate function open-drain)

​ 每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问;
输出模式下可以控制端口输出高电平低电平,用于驱动LED,蜂鸣器等,如果是大功率器件(比如电机),还需要加上驱动器(小电流控制大电流);
输入模式下可以读取端口的高低电平,用于读取外接按键,外接模拟信号的输入,ADC电压采集,模拟通信协议接受数据等;

1.3 GPIO工作模式

1.3.1 GPIO每位的具体电路结构

image-20250816092810355.png

1.3.2 每种模式详解

1.3.2.1 输出模式

  1. 在开漏或推挽式配置中,输出缓冲器被打开,输出缓冲器是 GPIO 内部用于驱动外部负载的电路。
  2. 推挽模式:输出寄存器上的 1 将激活P-MOS,输出高电平。0 将激活N-MOS,输出低电平。
  3. 开漏模式:PMOS永远关闭。 输出寄存器上的 0 激活N-MOS,而输出寄存器上的1 将端口置于高阻状态,所以外部必须要接上拉电阻
  4. 施密特触发输入被激活,施密特触发是输入信号的电平判定方式,具有迟滞(hysteresis),可以防止输入信号在噪声下频繁跳变,输入信号在达到一定高电平或低电平阈值后才会被识别为逻辑 1 或 0,提高抗干扰能力。
  5. 弱上拉和下拉电阻被禁止,GPIO 内部通常带有弱上拉或下拉电阻,用来在引脚悬空时提供默认电平。禁止后,引脚悬空时不再被内部电阻拉高或拉低,需要外部电路提供电平。
  6. 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器,CPU 读取 IDR 就能获取当前引脚实际电平。
  7. 开漏模式时,读输入数据寄存器时可得到I/O口状态。输入和输出可以不一样,在开漏模式下,读取 IDR 可以得到引脚的实际电平,而不仅仅是你写入的值。
  8. 在推挽模式时,读输出数据寄存器时可得到最后一次写的值,读的跟输出一样。

推挽输出

输出1
  1. 设置寄存器写入1

image-20250818145607545.png

或者直接在输出数据寄存器写入1

image-20250818145753556.png

  1. 输出寄存器收到1

image-20250818145635979.png

  1. 输出控制反转,反转后P-MOS管收到0,非门又将0变成1;N-MOS管反转后变成0;

image-20250818150244580.png

  1. 因此P-MOS导通,引脚输出1高电平:

image-20250818150416812.png

  1. 此时,读引脚也是高电平

image-20250818150508171.png

输出0
  1. 清除寄存器写入1,或者直接在输出数据寄存器写入0

image-20250818150804103.png

  1. 输出数据寄存器收到0

image-20250818150831984.png

  1. 反转后,P-MOS断开,N-MOS导通:

image-20250818150953329.png

  1. 此时引脚输出低电平,读取引脚也是低电平

image-20250818151107754.png

推挽输出总结
  1. 向设置/清除寄存器对应的设置位或清除位写1
  2. 或者直接输出寄存器对应位写1或0
  3. 也可以从输入寄存器读取引脚状态
  4. 工作时两个MOS管交替工作来驱动负载。输出1时,上部晶体管导通将电流推向负载; 输出0时,下部晶体管导通,将电流拉回地线。所以叫推挽输出。

开漏输出

开漏输出模式下,P-MOS管永远关闭:

image-20250818151402036.png

输出0
  1. 清除寄存器写入1,或者直接在输出数据寄存器写入0

image-20250818151623360.png

  1. 输出数据寄存器收到0

image-20250818151655953.png

  1. 反转后,N-MOS导通,输出和读取都是低电平

image-20250818151757820.png

输出1
  1. 设置寄存器或者复直接在输出数据寄存器写入1,输出数据寄存器收到1

image-20250818151943291.png

  1. 反转后,mos管为高组态

image-20250818152025792.png

  1. 通过外接上拉电阻将引脚拉高,输入输出都是高电平:

image-20250818152143896.png

开漏输出总结
  1. 上部晶体管永远关闭;
  2. 可以输出0;
  3. 如果要输出1必须接上拉电阻;

推挽输出和开漏输出的选择

使用推挽
  1. 驱动能力需求较高的场合;
  2. 高速信号传输;
  3. 无需共用信号线的场合;
使用开漏
  1. 多个设备共用信号线;
  2. 不同电压系统之间的接口;
  3. 需要外部上拉电阻来确定逻辑高电平的场合;

1.3.2.2 复用输出模式

内置外设的信号驱动输出缓冲器(复用功能输出),GPIO 不只是普通 I/O 引脚,还可以复用为外设信号(如 UART、SPI、定时器 PWM 输出)。

image-20250818160857185.png

1.3.2.3 输入模式

选择输入模式后,GPIO 的输出驱动会关闭;

  • 引脚处接了两个二极管,作用是保护我们的芯片不会由于电压过高或过低而烧毁。VDD是接电源(3.3V),VSS接地(0V)。如果IO引脚的输入电压高于VDD的值到一定程度,上方保护二极管导通,则引脚电压被拉低到VDD。如果IO引脚的输入电压(负电压)低于VSS到一定程度,则下方保护二极管导通,电压被拉高到VSS。

image-20250818161642731.png

image-20250818161840717.png

  • 如下图,2个开关控制引脚在没有输入的时候是上拉、下拉还是浮空。当上面的开关闭合的时候,输入被拉高到高电平。当下面的开关闭合的时候,输入被拉低到低电平。如果两个都不闭合,输入就是悬空状态。两个同时闭合,就是费电了,不会这么做的。

image-20250818161918509.png

image-20250818161933876.png

image-20250818162008790.png

  • 施密特(图中翻译成肖特基触发器应该是翻译错误,英文版手册是TTL Schmitt trigger)触发器是包含正反馈的比较器电路。可以对信号进行波形整形。

image-20250818162238225.png

从施密特触发器出来的数据,进入到输入数据寄存器中,我们就可以从中读取数据了

1.3.2.4 模拟输入模式

当配置为模拟输入时:

  1. 输出部分被禁止。
  2. 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置为0。
  3. 弱上拉和下拉电阻被禁止。
  4. 读取输入数据寄存器时数值永远为0。

image-20250818162619087.png

评论(6)

  1. 1 游客 2025-09-01 11:27 回复

    1

  2. 1 游客 2025-09-01 12:07 回复

    1

  3. @@yuHLu 游客 2025-09-01 12:09 回复

    1

  4. 1 游客 2025-09-01 12:11 回复

    1

  5. 1 游客 2025-09-01 12:12 回复

    1

  6. 1 游客 2025-09-01 12:13 回复

    1


最新评论

  • https://www.studyglobus.com/author/carroll34a5552/

    Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.

  • Richardgrold

    1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino

  • 砂岩白丘

    我一直梦想, 看到你们相册那样的地方。真棒。

  • 城市地標

    我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。

  • 宗教地標

    我热爱这样的想法, 去那么多国家。真的很鼓舞。

  • 觀景高地

    能感受到热爱。继续保持 感受。

  • 最佳季節

    我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

日历

2026年07月

   1234
567891011
12131415161718
19202122232425
262728293031 

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis