单片机的IO(GPIO)相关的知识点
注意:本文章需要配合无际单片机编程-硬件基础2.0教程视频学习。
注意:本文章需要配合无际单片机编程-硬件基础2.0教程视频学习。
关于单片机的IO,大家可能有很多疑问?IO口的内部结构是怎么样的?高低电平的电压范围是多少?单片机IO配置不同的工作模式对应内部结构有什么区别?…… 本节课就重点给大家解答这些问题。
本节课重点介绍:
- 施密特触发器
- IO口的高低电平&高低电平的电压范围
- STM32单片机8种工作模式详解
- STC15单片机4种工作模式详解
- 电平转化电路
- 上拉电阻&拉电流&上拉电阻的应用电路
- 下拉电阻&灌电流&下拉电阻的应用电路
一、 施密特触发器
为了更好的理解单片机IO口内部的结构,我们先了解一下施密特触发器。
1.分类
- 同向输出
- 反向输出
2.工作特性讲解:
如下图:
UT+:正(同)向阈值电压 UT- : 负(反)向阈值电压
UOH:输出高电平 UOL : 输出低电平
同向输出施密特触发器 :
当输出电平为低时,输入电压低于正向阈值电压,保持低电平;高于正向阈值电压,输出变高
当输出电平为高时,输入电压高于负向阈值电压,保持高电平;低于负向阈值电压,输出变低
反向输出施密特触发器 :
输出的电平状态和同向正好相反;
3.施密特触发器功能总结:
功能说明:
施密特触发器可作为波形整形器,能将模拟信号整形为单片机内部方便处理的数字方波信号,由于施密特触发器具有滞回特性,所以可用于抗干扰。
总结:
施密特触发器的作用:
- 将模拟信号转换成数字信号
- 提供抗干扰作用
二、 IO口高低电平&高低电平的电压范围
本小节主要给大家讲解2个问题:
- IO口高低电平的定义
- IO口高低电平的工作电压范围
1.高低电平的定义:
举例:
例如: sbit LED1 = P3^1;
LED1 = 1; 表示P3.1 输出高电平(用1表示)
LED1 = 0; 表示P3.1 输出低电平(用0表示)
高电平定义:
IO口作为数据输出的时候,IO口对应的数据寄存器bit位配置成1,IO口输出的电平,称为单片机的高电平,此时IO口的输出的电压,为高电平对应的电压值;
低电平定义:
IO口作为数据输出的时候,IO口对应的数据寄存器bit位配置成0,IO口输出的电平,称为单片机的低电平;此时IO口的输出的电压,称为低电平对应的电压值;
问:那单片机高低电平的电压范围是多少?
2.严格意义上的高低电平电压范围:
高电平电压是 VCC (单片机的供电电压 以STM32为例: VCC=3.3V)
低电平电压是 GND (0V)
3.IO口做输出功能时,高低电平的电压范围:
高电平:VCC 一般情况下,高电平就是单片机的供电电压
低电平: 0V.
4.IO口做输入功能时,高低电平的电压范围
①通过单片机数据手册获取输入高低电平的范围:
不同单片机,输入的高低电平的范围是不一样的,下面通过STC15和STM32F103为例,我们通过芯片说明书获取输入高低电平的范围。
- STC15单片机:以下截图来自芯片手册规格书
通过以上的问题,我们总结一下: 低电平:0-0.8V 高电平:2.2-VCC
- STM32单片机 以下截图来自芯片手册规格书
STM32单片机IO口的电平:
- 输入高电平范围: 0.65*VDD — VDD
- 输入低电平范围: 0 — 0.35*VDD
②输入的高低电平,硬件设计的时候注意事项:
通过规格书获取IO口输入的高低电平的电压范围,只能作为我们设计的参考。在产品设计的时候,低电平要尽可能的低(0V),高电平要尽可能的接近VCC。
备注:VCC和VDD都表示单片机的工作电压;
三、STM32单片机的IO的内部结构&8种工作模式
STM32F103在程序开发的时候的,有8种配置模式:
我们以视频的形式解析这8中形式的工作模式对应的内部结构:(图片来自STM32规格书)
1. 模拟输入:
当IO口用作ADC功能的时候,IO需要配置成模拟输入。
2.浮空输入:
3.上拉输入:
4.下拉输入:
5.推挽输出:
推挽结构:一般是指两个MOS管(或三极管)分别受两个互补信号的控制。
同一时刻,总是有一个MOS管(或三极管)导通,另外一个截止。高低电平由单片机的IO的数据寄存器控制的,VDD是由单片机电源决定。
- 输出高电平:
- 输出低电平:
6.开漏输出:
开漏是什么意思?
我们可以把开漏模式等效成以下的电路, 由于漏极是连接单片机的IO口,当内部的MOS管关闭的时候,MOS管的漏极是悬空断开的,所以叫开漏模式。
开漏输出的时候,外部必须要设计外部上拉电阻才可以正常的使用。
STM32单片机开漏模式时:
7.复用-开漏模式:
复用功能:GPIO口做串口、SPI、定时器捕获等功能的时候配置;
8.复用-推挽模式:
复用功能:GPIO口做串口、SPI、定时器捕获等功能的时候配置;
四、STC15 IO口内部结构(4种工作模式对应的内部结构解析)
本小节的主要内容:
- STC15单片机IO口4种工作模式的介绍
- 4种工作模式对应的内部结构解析
1.STC15单片机的IO的四种工作模式:
以下图片截自STC15单片机的规格书。
通过上图,我们可以知道,STC15单片机可以配置成准双向口、推挽输出、高阻输入、开漏。
2. 四种工作模式对应的内部结构:(了解)
关于STC15单片机的IO结构,规格上有很详细的说明,大家可以结合芯片规格书,来理解下面的内容。
①准双向IO口
此工作模式,STC15单片机的IO支持数据的输入和输出;
- 内部结构:
- 数据输出:
- 数据输入:
②推挽输出
- 内部结构:
- 数据输出:
- 数据输入:
③高阻输入
高阻模式在产品开发过程中,使用的相对比较少,我们直接通过规格书来查看,什么时候配置成高阻输入模式。(通过视频讲解)
④开漏模式
- 开漏模式使用说明:
即可读取外部状态,也可对外部输出(高电平或低电平)。如果要正确的读取外部的状态或需要对外部输出高电平,需外加上拉电阻。
- 数据输入和输出的工作原理(通过视频讲解)
3. STC15单片机IO在准双向IO口模式时,做数据输入的时候,为什么需要先输出高电平,才能正确的读取外部电平?
- 规格书文档说明:
- 原理分析
如果IO输出低电平的时候,红色圈起来的MOS导通,此时IO的电平恒定位0V(低电平),所以此时不管外部输入什么信号,数据输入端的电平都是低电平。
五、电平转换电路
如果两个通讯的芯片的高电平电压不一致,如何处理?
如下图,左边是STM32单片机芯片,右边是4G模块。 STM32单片机的高电平电压是3.3V,4G模块的高电平是1.8V,两个芯片通讯高电平不匹配,因此需要考虑电平转换电路。
关于以上电路在三极管课程中,给大家讲解过,这里直接跳过。
六、 上拉电阻&拉电流
1.上拉电阻的定义:
电阻的一端连接VCC电源,一端连接IO口(或GPIO口),让IO口的电平保持在高电平,这个电阻称为上拉电阻。
2.上拉电阻的分类和区别:
在单片机电路中,上拉电阻可以分为:IO内部上拉电阻 和外部上拉电阻。
IO口内部上拉电阻:单片机内部集成,阻值不可更改。
外部上拉电阻:由硬件工程师设计,阻值可以按照电路的需求来设计,阻值可以更改。
大多数单片机的IO内部都会集成上拉电阻,在产品设计中,我们也会尽可能的选择单片机的内部上拉电阻,这样可以减少单片机外部元器件的数量,降低成本等。 如果内部上拉电阻不能满足需求的时候,我们就需要在IO的外部设计外部上拉电阻。
3.单片机IO内部配置了上拉电阻,外部硬件设计也加了上拉电阻,有什么影响?
如上图:内部上拉电阻是R1,外部R2是外部上拉电阻,对产品的功能,一般情况下,基本上没有影响。 影响的这个IO口的上拉电阻的阻值, 上图的上拉电阻的阻值,是R1 和R2并联之后的电阻值。
4.如何估算单片机内部上拉电阻的阻值?(了解)
如下图,在单片机的IO口串联一个电阻(阻值:1K)到GND,用万用表测量IO口的电流I;
假如电压VCC:3.3V 测的电流是:0.3mA; R = R1+R2; R1=1K R2上拉电阻;
按照欧姆定律: R = U/I = 3.3V/0.0003A = 11000 Ω; 上拉电阻R2 = R – R1 =11K-1K = 10K;
所以这个单片机的上拉电阻的阻值是:10K;
5.IO的拉电流介绍
上拉电阻的阻值的大小,对IO口的功能有什么影响? 不同的阻值,对影响IO的拉电流大小。
- 拉电流的概念:
高电平输出时,一般是输出端对负载提供电流,其提供电流的数值叫做拉电流。
如下图的电流I,称为单片机IO口的拉电流。( RL代表负载)
- 拉电流的大小对电路的影响:
如下图,电流I越大,LED灯的亮度越高,越小,LED灯亮度越低;
6.上拉电阻的应用电路1:在低功耗产品中,上拉电阻的设计
在电池供电的产品中,为了降低产品的待机电流,我们需要考虑上拉电阻的取值,我们以下面的电路为例给大家讲解一下
网络标号GUAN 连接IO口P3.4,如果干簧管R7导通的时候,GUAN和GND连接导通,此时,P3.4的和GND连接;如果此时单片机配置成准双向IO口,则P3.4IO口的等效电路如下,R2是内部上拉电阻。
由于内部的上拉电阻的阻值是固定的,所以此时P3.4的拉电流是固定的。
如果我们需要把拉电流变得更小,如何处理? 我们可以把P3.4的IO口配置成开漏模式,外部设计一个阻值更大的上拉电阻R1/4.7M; 拉电流 = VCC/R1 = 3.3V / 4.7M = 0.7uA
总结:可以通过增加上拉电阻的阻值,降低IO的拉电流,从而降低产品的功耗。
注意:在产品设计中,上拉电阻要选择合适的取值,阻值太大,可能会导致功能异常。
7.上拉电阻的应用电路2: EEPROM电路
以下电路我们在电阻部分给大家讲解过,由于内部的上拉电阻的阻值比较大,拉电流比较小,可能会导致EEPROM工作不稳定,所以我们需要外部设计一个阻值比内部上拉电阻更小的上拉电阻,从而增加拉电流。
(以下电路更加详细的讲解,大家可以复习电阻课程的应用电路5)
总结:如果单片机内部的上拉电阻的拉电流比较小,不能满足产品需求的时候,我们需要在单片机的外部设计一个阻值更小的上拉电阻,增大拉电流,用来满足产品的需求。
上拉电阻应用总结:
- 应用电路1,断开内部上拉电阻,设计阻值更大的外部上拉电阻,减小拉电流,降低功耗
- 应用电路2,设计阻值更小的外部上拉电阻,增大拉电流,满足负载的需求。
因此在不同的应用电路中,我们要按照电路的需求,选择合适的上拉电阻,来满足产品的功能需求。
七、 下拉电阻&灌电流
1.下拉电阻的定义:
电阻的一端连接GND,一端连接IO口,将IO口不确定的状态保持在低电平,这个电阻称为下拉电阻。
2.下拉电阻的分类和区别:
在单片机电路中,下拉电阻可以分为:IO内部下拉电阻 和外部下拉电阻。
IO口内部下拉电阻:单片机内部集成,阻值不可更改。
外部下拉电阻:由硬件工程师设计,阻值可以按照电路的需求来设计,阻值可以更改。
有些单片机的IO内部是没有集成下拉电阻(STM32内部有下拉电阻,STC15没有),所以在产品设计中,如果有下拉电阻的需求,我们需要在IO口外部设计外部下拉电阻。
3.IO的灌电流的介绍
下拉电阻的阻值的大小,对IO口的功能有什么影响? 不同的阻值,会影响IO的灌电流
灌电流的概念:低电平输出时,一般是输出端要吸收负载的电流,其吸收电流的数值叫做灌电流
如下图的电流I,称为IO口的灌电流。( RL代表负载)
5.单片机电路中,IO口对灌电流的要求:
单片机电路设计中,对IO口的灌电流是有要求的,以STC15单片机为例,如下图,每个IO口的灌电流最大不能超过20mA; 对单片机整体来说,灌电流+拉电流 不能超过90mA;
如下图:P3.0控制LED2灯亮灭,当P3.0输出低电平的时候,LED2亮;
P3.0的灌电流 =( 3.3V – 2V(LED2消耗的电流))/1K = 1.3mA; 所以P3.0的灌电流是1.3mA;
6.下拉电阻应用电路:
下拉电阻在实际应用中,应用的比较少,这里举2个应用电路:
①应用电路1: 让IO保持在低电平
下拉电阻R40的作用是将GPIO15电平保持在低电平。
②应用电路2:(按键检测电路)
如下图,是一个按键检测的电路,单片机是STC15系列单片机。 P3.0检测按键的状态。
电路工作状态分析:
按键未按下:
SW3断开,R11接地,P3.0电压是 0V. 低电平;
按键按下:
SW3闭合,R11接地,R11上端接VCC,P3.0电压是 3.3V. 高电平;
总结:按键按下和松开,P3.0口的电平不一样,P3.0 可以检测按键的状态;
由于51单片机的内部,没有集成下拉电阻,所以必须要在外部加下拉电阻;如果不加R11这个下拉电阻,按键按下和松开,IO口检测的电平都是高电平,无法识别IO的状态。
R10的作用:降低P3.0 IO口的灌电流,保护IO口,防止IO被损坏。
重点回顾:
如何深入的分析单片机IO口的工作状态:
关于单片机IO口的使用,为了方便大家更好的理解单片机IO工作的原理,我们在深入的给大家讲解一下:
如下图:STM32单片机PB9 控制LED3的亮灭;
我们结合STM32单片机的内部结构,紫色线虚线框起来的部分,是一个内部结构的等效电路;
PB9数据寄存器输入0:Q16导通,Q17断开,LED2灭;
PB9数据寄存器输入1:Q17导通,Q16断开,LED2亮;
以上就是IO口输出控制的原理。IO口其他模式的控制大家也可以通过同样的方式来分析
学习要求:
- 施密特触发器 (要求:了解)
- IO口的高低电平&高低电平的电压范围(要求:理解并掌握)
- STM32单片机8种工作模式详解(要求:了解)
- STC15单片机4种工作模式详解(要求:了解)
- 电平转化电路(要求:理解并掌握)
- 上拉电阻&拉电流&上拉电阻的应用电路(要求:理解并掌握)
- 下拉电阻&灌电流&下拉电阻的应用电路(要求:理解并掌握)
其次,对于课程中讲解的很多理论知识,大家可以通过实际的项目实战进一步去理解和掌握,不需要大家死记硬背。