一、GPIO简介
什么是GPIO?
GPIO(General Purpose Input Output)通用输入输出口
作用:负责采集外部器件信息或者控制外部器件工作,即输入输出
如图1所示,当KEY按下去时候,VCC接通到GND中,IO采集到电压即为VCC(逻辑1),若没有触发KEY则采集到0
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
图1 图2
二、GPIO特点
1.快速翻转,每次翻转最快只需要两个时钟周期
2.可配置为8种输入输出模式
3.任何IO口都可作为外部中断
4.引脚电平:0V~3.3V,识别电压范围(COMS端口:3.3v,TTL端口(FT):5.5v):
-0.3<Vₗ˪<1.164
1.833<Vₗₕ<3.6v
5.输出电流:最大25mA
三、GPIO引脚分布
STM32引脚类型:
电源引脚(V字母开头)、晶振引脚(3-4为34.768KHz、5-6高速晶振)、复位引脚(7)
下载引脚、BOOT引脚(27、28、60)、GPIO引脚(其余以P开头的基本是)
四、GPIO基本结构
F1的GPIO位结构
上部是输入部分:信号进来经过保护二极管后进入输入启动器,经过上下拉电阻可使用后分成两条路,上路分至模拟输入ADC或者DAC中作为模拟使用,下路经过施密特触发器后分为复用功能输入,再分支为IDR输入数据寄存器,再通过CPU读取寄存器完成通用输入。
下部分是输出:主要靠P-MOS和N-MOS来输出,输出高电压则用P-MOS,低电平则用N-MOS,其左部是一个输出机构,通过二选一选择器,一条是通过输出数据寄存器ODR,另一条为复用功能输出。
图3
F4/F7/H7与F1对比
1.F4/F7/H7的上下拉电阻必须经过信号,而且F1在输出模式时,禁止使用内部上下拉,而F4/F7/H7可以
2.不同系列IO翻转速度不同
施密特触发器
施密特触发器就是一种整形电路,可以将非标准方波,整形成方波
特点:
当输入电压高于正向阈值电压,输出为高;
当输入电压低于负向阈值电压时,输出为低;
当输入在政府向阈值电压之间,输出不改变。
P-MOS&N-MOS管简介
MOS管是压控型元件,通过控制栅源电压(Vgs)来实现导通和关闭。
G:栅极 S:源极 D:漏极
P:Vgs<0,导通
N:Vgs>0,导通
GPIO模式
通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
1.输入浮空
上拉电阻,下拉电阻关闭,施密特触发器打开,双MOS不导通,模拟输入,复用功能输入不经过。
读取电平,高阻态时,IO不确定,由外部决定
2.输入上拉
上拉电阻开启,下拉电阻关闭,施密特触发器打开,双MOS不导通,模拟输入,复用功能输入不经过。
读取电平,高阻态时,IO为高电平,由VDD供电,呈现高电平
3.输入下拉
上拉电阻关闭,下拉电阻开启,施密特触发器打开,双MOS不导通,模拟输入,复用功能输入不经过。
读取电平,高阻态时,IO为高电平,由VSS提供电平,呈现低电平
4.模拟功能
上拉电阻,下拉电阻关闭,施密特触发器关闭,双MOS不导通,复用功能输入不经过。
只经过模拟功能ADC、DAC
5.开漏输出
上拉电阻,下拉电阻关闭,施密特触发器打开P-MOS不导通,N-MOS导通,模拟输入,复用功能输入不经过,往ODR对应位写0,N-MOS管导通,写1则不导通,此时,在外部加入上拉电阻,可以输出1,否则不行。
6.开漏式复用功能
上拉电阻,下拉电阻关闭,施密特触发器打开,P-MOS不导通,模拟输入,复用功能输入不经过。
经过复用功能输出,不能输出高电平,必须有上拉才能输出高电平,有其他外设控制输出
7.推挽输出
上拉电阻,下拉电阻关闭,施密特触发器打开,往ODR对应写0,N-MOS管导通,写1则P-MOS管导通
经过ODR输出,不能输出高电平,必须有上拉才能输出高电平,有其他外设控制输出,在输出控制器加入反相器,则可以正常工作,可输出高低电平,驱动能力强,因为是由VDD引到外部,消耗比较少
8.推挽式复用功能
上拉电阻,下拉电阻关闭,施密特触发器打开,通过复用功能来输出,经过输出控制后加入反相器既可以让其输出1。优点同样可输出高电平,驱动能力强,并且由其他外设控制输出。
经过ODR输出,不能输出高电平,必须有上拉才能输出高电平,有其他外设控制输出,在输出控制器加入反相器,则可以正常工作,可输出高低电平,驱动能力强,因为是由VDD引到外部,消耗比较少
GPIO点灯
若要通过GPIO来点灯首先先配置GPIO,通过图中代码将其Mode、Pin 和Speed配置成自己想要 的模式,再通过GPIO_Write来输入想要的执行命令,如果想要制作流水灯,则使用while循环,再用延时函数去设置间隔