(1)保护二极管
引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入,
当引脚电压高于 VDD_FT 或 VDD 时,上方的二极管导通吸收这个高电压,当引脚
电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
尽管 STM32 芯片内部有这样的保护,但并不意味着 STM32 的引脚就无所不能,如
果直接将引脚连接大功率器件,比如电机,那么要么电机不转,要么烧坏芯片。
如果要驱动一些大功率器件,必须要加大功率及隔离电路驱动。也可以说 STM32
引脚是用来做控制,而不是做驱动使用的。
(2)上下拉电阻
从图中可以看到,上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开
关,可以控制引脚的默认状态电平。当开启上拉时引脚默认电压为高电平,开启
下拉时,引脚默认电压为低电平,这样就可以消除引脚不定状态的影响。当然也
可以将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个
模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只
有 1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者
下拉模式,使它有一个默认状态。STM32 上下拉及浮空模式的配置是通过
GPIOx_CRL 和 GPIOx_CRH 寄存器控制的,大家可以通过《STM32F1xx 中文参考手
册》查阅。
STM32 内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流
很小,如果想要输出一个大电流,那么就需要外接上拉电阻了。
(3)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 管将轮流导通,一个负责灌电流(电流输
出到负载),一个负责拉电流(负载电流流向芯片),使其负载能力和开关速度
都比普通的方式有很大的提高。图 7.1.4 为推挽输出模式的等效电路。
                   

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

在开漏输出模式中还有一个特点,引脚具有“线与”关系。就是说如果有很
多个开漏输出模式的引脚接在一起,只要有一个引脚为低电平,其他所有管脚都
为低,即把所有引脚连接在一起的这条总线拉低了。只有当所有引脚输出高阻态
时这条总线的电平才由上拉电阻的 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)”章节。
(4)输出数据寄存器
前面提到的双 MOS 管结构电路的输入信号,是由 GPIO“输出数据寄存器
GPIOx_ODR”提供的,因此我们通过修改输出数据寄存器的值就可以修改 GPIO 引
脚的输出电平。而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存
器的值从而影响电路的输出。
(5)复用功能输出
由于 STM32 的 GPIO 引脚具有第二功能,因此当使用复用功能的时候,也就
是通过其他外设复用功能输出信号与 GPIO 数据寄存器一起连接到双 MOS 管电路
的输入,其中梯形结构是用来选择使用复用功能还是普通 IO 口功能。例如我们
使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯发送引脚,这个时
候就可以把该 GPIO 引脚配置成 USART 串口复用功能,由串口外设控制该引脚,
发送数据。
(6)输入数据寄存器
输入数据寄存器是由 IO 口经过上下拉电阻、施密特触发器引入。当信号经
过触发器,模拟信号将变为数字信号 0 或 1,然后存储在输入数据寄存器中,通
过读取输入数据寄存器 GPIOx_IDR 就可以知道 IO 口的电平状态。
(7)复用功能输入
此模式与前面讲解的复用功能输出类似。在复用功能输入模式时,GPIO 引
脚的信号传输到 STM32 其他片上外设,由该外设读取引脚的状态。同样,如我们

使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯接收引脚,这个时
候就可以把该 GPIO 引脚配置成 USART 串口复用功能,使 USART 可以通过该通
讯引脚的接收远端数据。
(8)模拟输入输出
当 GPIO 引脚用于 ADC 采集电压的输入通道时,用作“模拟输入”功能,
此时信号是不经过施密特触发器的,因为经过施密特触发器后信号只有 0、1 两
种状态,ADC 外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之
前。类似地,当 GPIO 引脚用于 DAC 作为模拟电压输出通道时,此时作为“模
拟输出”功能, DAC 的模拟信号输出就不经过双 MOS 管结构了,模拟信号直接
通过管脚输出。 

GPIO功能框图的更多相关文章

  1. 使用寄存器点亮LED(第1节)—GPIO功能框图讲解

    GPIO简介 GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚, STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 ...

  2. stm32学习笔记之GPIO功能框图分析

    GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 芯片的GPIO被分 ...

  3. 树莓派学习路程No.1 GPIO功能初识 wiringPi安装

    WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3.wiringPi使用C或者C++开发并且可以被其他语言包转,例如python.ruby或者PHP等.Wiri ...

  4. 树莓派学习路程No.2 GPIO功能初识 wiringPi安装

    WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3.wiringPi使用C或者C++开发并且可以被其他语言包转,例如python.ruby或者PHP等.Wiri ...

  5. 树莓派学习笔记——GPIO功能学习

    0.前言     树莓派现在越来越火,网上树莓派的资料也越来越多.树莓派的学习可以分为linux系统学习和linux驱动学习,利用树莓派制作LED流水灯应该算是驱动学习吧.树莓派来自国外,国外嵌入式开 ...

  6. imx6q GPIO功能的用法

    假如我们要使用扩展口的第11脚EIM_D18. 先在arch/arm/plat-mxc/include/mach/iomux-mx6q.h中找有EIM_18. 能够找到MX6Q_PAD_EIM_D18 ...

  7. SysTick系统定时器(功能框图和优先级配置)

    SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 ...

  8. LPC4370使用学习:GPIO的引脚功能使用,和12864OLED模拟I2C驱动

    一: 手中有块LPC4370的开发板,因为便宜,所以引脚引出的不多,而且只有基本的底板资源驱动代码和例程. 看着手册和例程看了老半天,写程序写了半天,结果GPIO老是驱动不起来,因为引脚配置寄存器中有 ...

  9. stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用库函数使用GPIO引脚功能.   补充   本文章为多年前学习 ...

随机推荐

  1. PHP+Apache+MySQL+phpMyAdmin安装和配置

    下载网址: PHP:http://windows.php.net/download     版本: php-5.6.31-Win32-VC11-x64.zip Apache:https://www.a ...

  2. MyCat基本知识

    一.Mycat基本元素 1.逻辑库,mycat中存在,对应用来说相当于mysql数据库,后端可能对应了多个物理数据库,逻辑库中不保存数据 2.逻辑表,逻辑库中的表,对应用来说相当于mysql的数据表, ...

  3. C语言基础知识(五)——数组与指针的等价表示

    void f(void) { int * p; int a[3] = {1,2,3}; p = a; printf("%d %d", a[0], p[0], *(a+1), *(p ...

  4. Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序

    1.5 提高可用性-发布多节点的Node/Express网络应用程序 Kubernetes实战 - 从零开始搭建微服务 前言 在上一篇文章中,已经学习了如何简单地开发一个单层网络应用.[Kuberne ...

  5. Java学习之路【第一篇】:前言

    Java 语言概述 一.什么是Java语言 Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级的编程语言.所谓编程语言,是计算机的语言,人们 ...

  6. 子串 NOIP2015 D2T2 luoguP2679 字符串处理+DP

    AC通道! 题目大意: 给定两个长度分别为 n 和 m 的字符串 A 和 B,选取 A 中的 k 个子串,使这 k 个子串按照先后顺序连接起来后等于 B 子串.   输入输出样例 输入 #1 6 3 ...

  7. MANIFEST.MF是个什么?

    MANIFEST.MF是个什么? 写这篇文件主要记录JRA文件里面到底是什么?然后MANIFEST.MF又是什么?Springboot 如何只有Main方法就可以运行的? Springboot项目打包 ...

  8. 资源在windows编程中的应用----菜单

    资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...

  9. php CURL 发送请求封装

    cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 ...

  10. Rocket - util - Repeater

    https://mp.weixin.qq.com/s/xyEq3DgYuf2QuNjssv8pkA   简单介绍Repeater的实现.   ​​   1. 基本功能   A Repeater pas ...