STM32系列单片机以其较好的性能,丰富的片上资源,成为当今嵌入式行业最经典、最常用的单片机之一。其通用输入输出接口(GPIO)多样的工作方式亦是其优势之一。本文将从原理上解释其工作过程。先来看看GPIO几种工作模式的总体情况。
从上图中可以看出,GPIO共有4种输入模式和4种输出模式。
1输出模式
1.1 推挽输出
从中文的字面意思来理解,推挽就是推拉的意思,在此模式下,对于负载来说,分别有两个电流方向,故而得名。也可以参考模拟电路里的乙类放大电路。如下图所示。
在输出高电平时,P-MOS导通,N-MOS截止,而在输出低电平时,恰好相反P-MOS截止,N-MOS导通。这样单片机就可以通时输出高电平和低电平了。很好理解。
1.2 开漏输出
在这个模式的时候,只有N_MOS可以工作,且其漏极处于开路的状态,故而得名“开漏输出”。如下图所示。
从
从上图中可以看出,如果不接外部的负载RL,则对于单片机内部而言,N_MOS的漏极处于开路状态,因而当N_MOS导通的时候,输出低电平,当N_MOS关断的时候输出高阻态。那如何输出高低电平呢?
这个时候就需要外接上拉电阻。
此时,当单片机N_MOS导通的时候,输出低电平,当N_MOS关断的时候输出高电平。那么这么做的意义是什么呢?单片机本身就可以同时输出高电平和低电平,何必搞这么麻烦?
这里就和实际的使用需求有关系了
- 比方说有的负载需要较高的电压值,而单片机缺不能实现,这个时候就可以采用开漏输出,上图中可以提供约5V的输出电压。
- 要实现“线与”,意思就是说,只要有一个IO口输出低电平,则输出低电平,全为高电平时才输出高电平,当用硬件实现的时候,会发现,如果采用推挽输出的方式,必然会出现一个P-MOS和N-MOS同时导通的情况,这个时候可能会出现将管子烧坏的情况。
1.3 复用推挽输出
从电路中可以看出,复用推挽输出和推挽输出并没有太大区别,区别仅仅在于触发源不一样, 单纯的推挽输出是在软件中手动地设置0
和1
实现的。而复用推挽输出指的是在某些模式下,启用了引脚的复用功能,这个时候需要设置该引脚为复用推挽输出,因为这个时候开发人员只需要配置相应的寄存器(参数),不需要关注具体的引脚电平。
1.4 复用开漏输出
参考复用推挽输出部分。
其实在IIC通信协议中(对于主设备而言),SCL可以配置为推挽输出,因为只需要输出时钟信号,而SDA除了输出数据信号,同时还需要扫描输入的应答信号,这个时候就需要配置为开漏输出,当然,若将两根线都配置为开漏输出,也没有问题,这个时候两根线都需要配置上拉电阻。
2 输入模式
了解了上面的内容,四种输入模式相对来说就很好理解了。
2.1 浮空输入
顾名思义,对于单片机来说,此时的输入引脚处于高阻态,需要外部同时提供高电平和低电平,因为在该模式下,内置上拉电阻和下拉电阻都没有生效。而内部的TTL肖特基触发器相当于斯密特触发器,用于对输入信号进行“整形”,将其转化为理想的TTL电平后传入输入数据寄存器,等待CPU读取。
2.2 上拉输入
所谓的上拉输入就是内部的上拉电阻投入使用。这个时候当外部输入低电平时可正常输入低电平,而当外部无输入信号(高阻态)时,可由单片机自身的上拉电阻提供高电平信号。
上图为当外部引脚配置为上拉输入时,外部引脚为高阻态时的电流通路。
2.3 下拉输入
下拉输入与上拉输入正好相反,这个时候当外部输入低电平时可正常输入高电平,而当外部无输入信号(高阻态)时,可由单片机自身的下拉电阻提供低电平信号。
2.3 模拟输入
只有在此模式下,输入才为模拟信号,因为其他模式输入模拟信号没有任何意义,经过了肖特基触发器,全都变成了数字信号。这时候上拉和下拉电阻也没有起到作用,电平直接由外部输入, 传输到内部的AD转换器单元将其转换为数字信号,等待CPU处理。
温馨提示:若要十分透彻地理解以上的内容,需要自己补充一些模电和数电的相关知识。
-------------------------------------------------------------END-------------------------------------------------------------