请问MCU是如何实现IO口的输入输出控制的?

控制/MCU

1883人已加入

描述

GPIO(General Port Input&Output)通用输入输出接口,MCU各个管脚对外交互最根本的单位。GPIO的对于嵌入式就像Hello world之于各种语言同等重要,都是打开这扇门的第一步。看过一个比较有意思的比喻:人类的技术发展其本质就是烧水,从蒸汽机烧水到现在核装置烧水。那么同样的MCU的各类应用,其本质就是对IO口的各种花样电平翻转,CAN/I2C/SPI/ETH/SDIO/USB等等外设使用的第一步都是对其对应的IO管脚进行配置。掌握GPIO的特性,大家就能say hello to the embedded world。

本篇文章是以ST CortexM系列的芯片文档作为范例讲解,主要阐述MCU是如何实现IO口的输入输出控制的, GPIO的一些属性介绍等,希望大家在阅读完本文后能够大致知晓GPIO的特性,并对往后的开发/学习能有所帮助。

首先是IO口的类型,重点需要区分的是TTa/TC(标准3.3V IO口)与FT类型,它们最大的区别是耐受电压分别为3.3V与5V的区别,关于这一点,一般主要是硬件工程师在IO口的选择上需要做好区分。主要的IO描述如下图所示:

推挽输出

TTa/TC类型与FT类型的构成基本一致,主要差异如下图红框所示

TTa/TC类型

推挽输出

FT类型

推挽输出

如上图可见GPIO的基本框架TTa/TC/FT都是一致的,接下来我们将详细的讲解一下GPIO是如何实现输入与输出,什么是开漏输出与推挽输出,什么是管脚复用功能。

如下图所示,我们按功能将GPIO功能框架分别标号以及标注颜色进行区分。

推挽输出

(1) 引脚处两个保护二极管用以防止有过高或者过低的电压输入导致内部损坏,当外部电压高于VDD_FT时,上方二极管导通;当外部电压低于VSS时下方二级管导通。IO口的驱动能力比较弱,只能作为一些发光二极管或者驱动三极管开关控制,不可直接驱动功率设备。通常IO口的状态有3种,PullUp(上拉)/Pulldown(下拉)/Floating(浮空),上拉即接通VDD/下拉即接通Vss,浮空的话即不处于上拉也不处于下拉,一般在初始配置时在PP和PD中选取一个较为合适。

(2) IO口进入框架后根据输入与输出功能分为两部分走向,(2)部分即配置为输出时的IO连接部分。根据P-MOS和N-MOS的控制结构,输出模式主要可配置为推挽模式和开漏模式。

首先简介一下推挽模式,等效电路如下所示。当IN为1的时候,P-MOS导通,N- MOS关闭,此时有VDD对外灌电流(电流较小),显示有3.3V电压输出;当IN为0时,P-MOS关闭,N-MOS导通,此时表现为拉电流,将外部接入GND。这一推一拉就形象地解释了为什么称其为推挽模式。

推挽输出

开漏模式的等效电路如下图所示,当GPIO配置为开漏模式时,P-MOS不参与工作。当IN为1的时候,P-MOS/N-MOS都不工作,此时既不输出高电平也不输出低电平,IO呈现出高阻态;当IN输出0时,则N-MOS导通,使得外部接入GND。为了开漏模式下能够正常运行,需要接入上拉电阻,虽然MCU内具有上拉电阻,但为了正常使用,需要外部电路设计,开漏模式下IO添加上拉电阻。常见的I2C/SPI一些通讯应用会将IO配置为开漏模式。

推挽输出

(3) 该部分的控制信号通常就是纯粹的IO控制,通过修改MCU内的GPIO输出寄存器控制GPIO的拉高拉低

(4) 复用功能输出即控制信号时来自其他模块,类似于充当UART- TX,CAN- TX等发送接口。

(5) 纯粹的IO输入状态,输入为高电平即为1,输入低电平即为0,状态会更新在MCU内部的GPIO输入寄存器中.

(6) 即复用为其他模块的输入,类似于UART- RX,CAN- RX等

(7) 当管脚配置为模拟时,将会禁用GPIO模块TTL施密特触发器/P- MOS/N-MOS/上下拉电阻,此时的输入输出都由模拟通道来进行,输入即是ADC/输出即是DAC。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分