文章目录
GPIO输出
1、GPIO简介
GPIO(General Purpose Input Output)通用输入输出口
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
2、GPIO基本结构
所有GPIO都挂载在APB2外设总线上,每个GPIO有16个引脚,内部有寄存器和驱动器,寄存器存储数据,驱动器增加信号的驱动能力。
3、GPIO位结构
左寄存器,中间驱动器,右边引脚电路,上班输入,下边输出。
引脚电路
二极管起到保护作用,电流过大保护二极管导通连接VDD,不会流入内部电路,电压低于0V从VSS流出,不会从内部电路汲取电流。
上拉和下拉
在图右上角带两个开关的VSS和VDD,提供默认的输入电平,如果啥都不接输入处于浮空的状态,输入电平易受外界干扰而改变,接入上拉、下拉电阻保证引脚的高低电平。
曲曲折折的线就是上下拉电阻,上拉电阻的英语是 pull-up resistor。
接上拉电阻的IO口怎么还能输入低电平
因为上拉电阻的阻值很大,从VDD到上拉电阻再到GND,上拉电阻把绝大部分电压分走,剩下的电压很小就约为0了,这就是低电平。
施密特触发器
对输入电压进行整形,如果输入电压大于某阈值,输出瞬间升为高电平,如果输入电压小于某阈值,输出瞬间降为低电平,抗干扰,避免因信号波动造成的输出抖动现象。
位设置/位清除寄存器
在寄存器需要操作的位写1即可。因为输出数据寄存器同时控制16个端口,并且寄存器只能整体读写,如果想单独控制一个端口不影响其他时,需要特殊操作。
MOS管
电子开关,负责将IO口接到VDD或VSS。
在推挽输出模式下,P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,就是输出高电平。数据寄存器为0时,上管断开,下管导通,输出直接接到VSS,就是输出低电平。这种模式下,高低电平均有较强的驱动能力,所以推挽输出模式也叫强推输出模式。
开漏输出模式下,P-MOS无效,N-MOS工作,数据寄存器为1时,下管断开,输出相当于断开,高阻模式,数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平。该模式只有低电平有驱动能力,高电平没有,可作为通信协议的驱动方式
,比如I2C通信的引脚。在多机通信的情况下,这个模式可以避免各个设备的相互干扰。另外开漏模式还能输出5V的电平信号,比如在IO口外接一个上拉电阻到5V的电源,当输出低电平时,由内部的N-MOS直接接VSS,当输出高电平时,由外部上拉电阻拉高至5V,这样就可以输出5V的电平信号,用于兼容一些5V电平的设备。
在输出关闭时,两个MOS管无效,端口的电平由外部信号来控制。
4、GPIO八种工作模式
通过配置GPIO的端口配置寄存器,上面位结构的电路就会根据配置进行改变,比如开关、MOS管和数据选择器的选择
浮空输入
输入的电平不确定,端口一定要接连续的驱动源
上拉输入
下拉输入
模拟输入
开漏输出
推挽输出
在输入模式下,输出都是无效的,也就是读的时候不能写,因为写会改变引脚信号影响读。
在输出模式下,可以输入,也就是写的时候可以读,因为读可以观测数据
复用开漏输出
复用推挽输出
由片上外设的线代替通用输出的线
5、LED和蜂鸣器的硬件电路
左上低电平驱动LED,LED正极接3.3V,负极通过一个限流电阻接到PA0上,当PA0输出低电平时,LED两端产生电压差,形成定向导通电流。高电平时两端都是3.3V的电压,不会形成电流。
左下高电平驱动,原理类似,相反。
右边驱动蜂鸣器,对于功率大的直接用IO口驱动会导致STM32负担过重,这时可以用三极管驱动电路来完成驱动的任务。上面是PNP三极管的驱动电路,三极管的左边是基极,带箭头的是发射极,剩下的是集电极。基极给低电平,三极管导通,给高电平,三极管截止。 右下是NPN三极管,基极给高电平导通。PNP的三极管接在上边,NPN的三极管接在下边,因为三极管的通断,需要在发射极和基极直接产生一定的开启电压,如果把负载接在发射极这边,可能导致三极管不能开启。解释一下,如果被控电器接在发射极,要求控制信号电压大于被控电器的需要的电压,这不符合以弱控强的要求。