(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. 王艳 201771010127《面向对象程序设计(java)》第六周学习总结

    实验六 继承定义与使用 一:理论部分: 第五章:继承类. 1.继承:已有类来构建新类的一种机制.档定义了一个新类继承另一个类时,这个新类就继承了这个类的方法和域,同时在新类中添加新的方法和域以适应新的 ...

  2. 201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结

    第一部分:理论基础 线程的同步 多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法,就只 能等待. 在Java中解决多线程同步问题的方法有两种: - Java SE 5. ...

  3. tableView的嵌套

    1,subTableView需要开启多手势识别,多层tableView都会响应滚动事件(如果底层是scroll 依然会响应,这样滚动tableview时,scroll也会滚动,导致滚动过于灵活)2,通 ...

  4. 枚举 转化为可行性判定问题 网络流 poj3189

    Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6914   Accepted: ...

  5. win-sudo插件解决Git bash 执行脚本报错问题 bash: sudo: command not found

    Windows git bash 默认没有sudo命令,可以添加win-sudo插件实现该功能 curl -s https://raw.githubusercontent.com/imachug/wi ...

  6. 同一父进程下的子进程之间的通信(pipe通信)

    首先对于fork命令  通过fork命令创建进程 父进程返回子进程id 子进程返回0 失败返回-1 对于pipe通讯机制   pipe通讯是半双工的 也就是说只能一方读一方写 题目中想要P1的输出作为 ...

  7. HTML特殊符号整理

    往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字.下面就是以字母或数字表示的特殊符号大全.                               ...

  8. MySql 语言分类

    (1)数据定义语言,即SQL DDL,用于定义SQL模式.基本表.视图.索引等结构.(2)数据操纵语言,即SQL DML.数据操纵分成数据查询和数据更新两类.(3)数据查询语言,即SQL DQL.(4 ...

  9. JavaScript中foreach、map、filter、find、every、some的用法

    foreach:只是循环数组中的每一项,没有返回值 如:  var arr = [2,3,3,4,5,6]; arr.foreach(function(item,index,array){ dosom ...

  10. 什么是cookie?

    cookie是什么? 其实cookies是由网络服务器存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络浏览行为有关,所以存储在你电脑上的cookies就好像你的一张身份证,你电脑上的cooki ...