本文以STM32F40 为例进行讲解,其它雷同
1. GPIO简介
GPIO(general purpose input output,通用输入输出端口)
简单来说就是软件可控制的引脚:STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
1)GPIO引脚分布图
如上图
- GPIO有 PA ~ PG + PH0、PH1 总共114个GPIO pin
- PA~PG:每组包含 16 个IO
2)STM32引脚分类
序号 | 引脚类型 | 引脚 | 备注 |
---|---|---|---|
1 | 电源 | VBAT、VDD、VSS、VDDA、VSSA,VREF+、VREF-等 | VBAT是备用电源 VDD和VSS是数字电源 VDDA和VSSA是模拟电源 VREF+和VREF-是参考电源。 |
2 | 晶振 | 主晶振IO、RTC晶振IO | |
3 | 下载&调试 | 用于JTAG下载的IO:JTMS、JTCK、JTDI、JTDO、NJRST | |
4 | BOOT | BOOT0、BOOT1 | 用于设置系统的启动方式 |
5 | GPIO | GPIOA ~ GPIOx | 专用器件接到专用总线,如I2C、SPI、SDIO、FSM、DCMI等总线需要接到专用的IO。 普通元器件(如蜂鸣器、LED灯、按键灯),使用普通的GPIO功能即可 |
2. 端口配置
GPIO的基本电路结构如下:
2.1 基本部件
1)保护二极管
芯片的引脚电平0~3.3V,部分引脚可以5V,超过5V,将会对芯片造成损害。
如上图 ① 标识,主要是保护芯片免受外部输入电平过高或者过低的影响,进而保护整个芯片。
其原理为:
- 当输入电压高于VDD_FT,上面二极管导通,使得电压最大为VDD_FT
- 当输入电压低于VSS,上面二极管导通,使得电压最低为VSS
2)上拉/下拉电阻
用于输定输入电压
3)MOS管
用于实现推挽和开漏输出
4)施密特触发器
具有 稳压 和 滤波 的作用,就是让通过的电平输出稳定的高低电平
输入的电平往往存在着失真、不稳定、波动等,使用施密特触发器,可以过滤掉噪声干扰,最大限度的稳定输出电压
原理:
● 当电压大于正向阈值Vth,输出高电平
● 当输入电压低于阈值Vtl,输出低电平
● 当输入电平处于 Vtl ~ Vth 之间,输出保持不变
2.2 模式配置
GPIO 各个端口位分别配置为多种模式:
模式 | 性质 | 备注 |
---|---|---|
输入浮空 | 数字输入 | 可读取引脚电平 若悬空,则电平不确定 |
输入上拉 | 数字输入 | 可读取引脚电平 若悬空,则电平为高 |
输入下拉 | 数字输入 | 可读取引脚电平 若悬空,则电平为低 |
模拟功能 | 模拟输入 | GPIO无效 引脚直接接入内部ADC |
开漏输出 | 数字输出 | 可输出引脚电平 高电平为高阻态,低电平为Vss |
推挽输出 | 数字输出 | 可输出引脚电平 高电平接Vdd,低电平为Vss |
复用功能推挽 | 数字输出 | 由片上外设控制 高电平为高阻态,低电平为Vss |
复用功能开漏 | 数字输出 | 由片上外设控制 高电平接Vdd,低电平为Vss |
1)浮空、上拉、下拉 输入
输入模式下,输出被禁止,施密特触发器打开。
由于电阻阻值很大,因此这里的上拉、下拉输入都是弱上拉、弱下拉,为了不对外部输入产生很大的影响
上拉输入:给一个默认的高电平,当没有外部输入时,默认输入高电平
下拉输入:给一个默认的低电平,当没有外部输入时,默认输入低电平
悬空输入: 如果输入引脚啥都不接,此时输入电平极易受外界的干扰导致输入电平不确定,完全由外部的输入决定
2)模拟输入
该模式主要为片上外设ADC而配置,从外部读取模拟信号