目录
一、简介
• GPIO(General Purpose Input Output)通用输入输出口
• 可配置为8种输入输出模式(具体后面会有介绍)
• 引脚电平:0V~3.3V,部分引脚可容忍5V(在引脚列表里表有FT的可以)
• 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等(是比较常用的外设),只要是涉及到高低电平控制的地方都可以使用GPIO,如果涉及到功率比较大的电路加入驱动电路即可.
• 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入(光敏热敏模块)、ADC电压采集、模拟通信协议接收数据等

二、GPIO基本结构
所有GPIO都挂载在APB2外设总线上(如果不理解此处概念建议先学习计算机组成原理相关内容后再后头看),每个GPIO都有零到十五共16个引脚,命名都是PA1到PA15.

寄存器的高低电平分别对应数据传输单位。在数字电路中,数据传输单位有二进制、八进制、十六进制等。其中,二进制是最常用的数据传输单位,它只有0和1两个数码 。在数字电路中,0和1分别代表低电平和高电平。数字电路采取0和1这两个逻辑值来表示物理量的实际值,从而隐藏了模拟电路的缺陷。可以用0和1是表示不同的物理状态,并不是电路中的物理量值0V,1V 。

三、GPIO位结构

上图中上半部分为输入电路,下半部分为输出电路
从右侧开始看,i/o引脚链接了两个 保护二极管,当输入电压高于设定电压时,上方二极管导通,当输入电压为负电时,相对于内部电路而言,下方二极管导通,从此起到了保护内部电路的作用。
最初进入输入电路的结构为两个开关,分别控制着默认输入电平,链接VDD的就是上拉输出开关,链接VSS的就是下拉输出开关,可以通过程序进行配置,这两种模式都是弱上拉或者弱下拉,不会影响数据输入,如果都没有选择,则会进入浮空输入模式,这种模式易受外界干扰,处于一种不确定的状态。
下一个装置为施密特触发器,对输入电压进行整形,
高于阈值输出高电平,低于某一阈值输出低电平
如右图所示,绿线为两个阈值,黄线为实际输入,
红线时经过滤波后输入的电压,高于高低于低才会转变
在输入电路最后,经过滤波的新号就可以进入输入数据寄存器;另外的两条线路直接连接到片上外设,模拟输入是模转数,需要输入模拟量,所以要接在施密特触发器之前,另外一个为复用输入端口,可以连接到其他外设上,例如串口的输入功能。
接下来是输出部分,这次我们从左端开始,数字部分通过输出数据寄存器或者片上外设控制,如果通过io口,就是普通的输出,要经过位设置或清除寄存器,通过这个寄存器可以单独操作某一位而不影响其他的位置,设置成1的位才会受到影响,如果想将某一位清零,就在位清除寄存器对应位写1即可;
还有一种方式就是按位与和按位或
另外一种种方式就是读取stm32位带区域,类似于51的位寻址
继续向右,便是电子开关,有推挽,开漏,浮空三中模式
推挽输出模式
输出寄存器为1,上管导通下管断开,接上VDD,输出高电平
输出寄存器为0,相反,接VSS,输出低电平
这种模式下,高低电平均有较强的驱动能力,所以又叫做强推输出模式,STM32对io口有绝对控制权
开漏输出模式下,,P-MoS是无效的,只有N-Mos在工作,数据寄存器为1时,下管断开,也就是高阻模式,数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平,此时只有低电平有输出能力,高电平没有驱动能力,可以作为通信的输出模式,输出5V信号
关闭,都无效,由外部控制

四、GPIO模式
模式名称
|
性质
|
特征
|
浮空输入
|
数字输入
|
可读取引脚电平,若引脚悬空,则电平不确定
|
上拉输入
|
数字输入
|
可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
|
下拉输入
|
数字输入
|
可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
|
模拟输入
|
模拟输入
|
GPIO无效,引脚直接接入内部ADC
|
开漏输出
|
数字输出
|
可输出引脚电平,高电平为高阻态,低电平接VSS
|
推挽输出
|
数字输出
|
可输出引脚电平,高电平接VDD,低电平接VSS
|
复用开漏输出
|
数字输出
|
由片上外设控制,高电平为高阻态,低电平接VSS
|
复用推挽输出
|
数字输出
|
由片上外设控制,高电平接VDD,低电平接VSS
|
1)浮空/上拉/下拉输入

再输入模式下,输出都是无效的,一个端口只能有一个输出,但可以有多个输入
2)模拟输入

只有最上面一根线是导通的。所以在使用ADC时将引脚配置为模拟输入就行了。
3)开漏/推挽输出

4)复用开漏/复用推挽输出

五、LED
正向通电点亮,反向通电不亮。具有单向导电性。LED的正负极判断方法有很多种,以下是一些常见的方法:
- 看标识:贴片式二极管在底部会有'T'或倒三角符号,'T'一横的一边是正极,另一边是负极,三角形符号的边靠近的是正极,'角'靠近的是负极。
- 看引脚:发光二极管的引脚一般正极比较长,负极引脚比较短。
- 看管内形状:从侧面观察两条引出线在管体内的形状,小的为正极,大的为负极。
- 通过万用表测试:把万用表调节到二极管档位,二极管发光时,红表笔接的一端是正极。
- 电路图中,有横杠的一端为负极
六、三极管
三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种控制电流的半导体器件。其作用是把微弱信号放大成幅度值较大的电信号,也用作无触点开关。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有PNP和NPN两种 。具体参考"模拟电路"的基本内容。
七、蜂鸣器
1有源蜂鸣器
有源蜂鸣器的正负极判断方法与无源蜂鸣器不同。对于有源蜂鸣器,当它的正极接电源正极,负极接电源负极后,它就会立即响起来。如果两个脚剪成一样长,又无其他标识,就只能慢慢加电压试。因为其内部含有振荡源。
2无源蜂鸣器
无源蜂鸣器的正负极判断方法与有源蜂鸣器不同。对于无源蜂鸣器,可以用电池搭一下,注意蜂鸣器上的正负极,有源的会出声,无源的最多"嗒"一下。也可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另族高一引脚上来回碰触,如果触发兆租尺出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且型埋电阻在几百欧以上的,是有源蜂鸣器 。 需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
八、面包板

九、硬件电路

一:正极接3V3,负极接io,io配置为低电平时LED电路中电流导通,小灯亮起,当io为高电平时两边没有电压差,没有电流,小灯熄灭
二:反之正极接io,负极接GND,当io为高电平时小灯亮起.电路中限流电阻可以起到保护电路的效果.有限采用第一种电路,因为在很多芯片中,都采用低电平强驱动,高电平弱驱动的规则,这样可以避免电平起冲突.
蜂鸣器同理.通过三极管基极集电极发射极来控制内部电流.
在下一篇中我们将会记录代码的使用。