zoukankan      html  css  js  c++  java
  • 【华为云技术分享】STM32 GPIO的原理、特性、选型和配置

    基本结构

    STM32 GPIO是通用输入/输出端口的英文简称,其可实现输入、输出、驱动、通信等功能,STM32的I/O 端口有8种模式(4种输入模式和4种输出模式),每个 I/O 端口位支持3种最大翻转速度(2MHz、10MHz、50MHz),均可自由编程,但I/O 端口寄存器必须按 32 位字、半字(16位)或字节(8位)进行访问,具体模式如下所示:

    浮空输入
    上拉输入
    下拉输入
    模拟输入
    开漏输出
    推挽输出
    复用功能推挽输出
    复用功能开漏输出

    以STM32L011为例(其他STM32处理器大同小异),GPIO基本结构如下所示:

    关键器件解析:

    1、保护二极管:防止I/O引脚外部过高、过低的电压输入,当引脚电压高于VDDIOx时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

    2、开关:开关为TTL肖特基触发器,将模拟信号转化为0和1的数字信号,但当GPIO作为ADC采集电压通道时,此时信号不再经过触发器进行TTL电平转换。

    3、P-MOS、N-MOS:单元电路使得GPIO具有“推挽输出”和“开漏输出”的功能。

    4种输入模式

    STM32具有浮空输入、上拉输入、下拉输入和模拟输入4种输入模式。

    浮空输入模式,I/O端口的电平信号由外部输入决定,电平状态不确定,最终直接进入输入数据寄存器。浮空输入通常用于配置USART的RX引脚,如下图所示:

    上拉输入模式,I/O端口悬空(在无信号输入)的情况下,电平状态保持在高电平,当输入低电平时,电平状态是低电平,最终直接进入输入数据寄存器,如下图所示:

    下拉输入模式,I/O端口悬空(在无信号输入)的情况下,电平状态保持在低电平,当输入高电平时,电平状态是高电平,最终直接进入输入数据寄存器,如下图所示:

    模拟输入模式,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。模拟输入通常应用于ADC模拟输入,或者低功耗下省电等情景,如下图所示:

    4种输出模式

    STM32有开漏输出、推挽输出、复用功能开漏输出和复用功能推挽输出4种输出模式(本文STM32L011的上、下拉电阻为公共区域,所以输出模式具有上拉或下拉功能)。

    开漏输出模式,通过配置置位/复位寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。开漏输出只可以输出强低电平,高电平得靠外部电阻拉高,输出端相当于三极管的集电极,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内),如下图所示:

    需要注意N-MOS管的特性,当设置输出的电平状态为高电平时,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口内部或者外部的上拉或者下拉决定;当设置输出的电平状态为低电平时,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。

    推挽输出模式,通过配置置位/复位寄存器或者输出数据寄存器的值,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管决定:低电平。

    复用功能开漏输出模式、复用功能推挽输出模式的原理和开漏输出模式、推挽输出模式原理基本一致,只不过输出的高低电平,不是由MCU配置置位/复位寄存器或者输出数据寄存器的值,而是利用片上外设模块的复用功能输出来决定的(通信接口(SPI,UART,I 2 C,USB,CAN,LCD等)、定时器、调试接口等复用)。复用功能开漏输出通常用于TX1、MOSI、MISO等引脚的配置,复用功能推挽输出通常用于I2C的SCL、SDA。以复用功能推挽输出模式为例,实现原理如下图所示:

    GPIO选型和配置

    如何选择适合其应用开发的GPIO模式和配置呢?请参考下图所示。

    作者:华为云特约供稿开发者 不脱发的程序猿

  • 相关阅读:
    初步理解Java的三大特性——封装、继承和多态
    设计模式
    区分super和this
    类—矩形面积
    生成不重复的随机数(待完善)
    关于类的创建和调用
    生成验证码
    endsWith和startsWith同样效果其他形式的写法(2016.1.12)
    去除字符串中空格的方法(2016.1.12P141-2)
    java的抽象类
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/12383436.html
Copyright © 2011-2022 走看看