目录
1.使用步骤:①开启GPIO外设时钟使其使能----利用RCC(reset and clockcontrol)配置
④GPIO 口的配置具有上锁功能,配置完成后可以通过程序锁住配置组合,直到下次芯片复位才能解锁。
一、基本介绍
GPIO(General Purpose Input Output)通用输入输出口,可配置为8种输入输出模式
1.引脚电平:0V~3.3V,部分引脚可容忍5V
2.输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
3.输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
4.GPIO口挂载在APB2上,APB2时钟一般为主频72MHz(使用的为STM32F103C8T6),GPIO基本结构可理解为APB2GPIOX(A-G)寄存器驱动器端口,且通过软件配置端口寄存器可以配置GPIO的工作模式
二、GPIO位结构图分析
IO口端口位基本结构图
从上图最右端引脚进入首先为两个保护二极管 ,防止电压过低或过高。当引脚电压高于VDD时上方二极管导通;当引脚电压低于VSS时下方二极管导通;
根据框图可将图分为输入和输出两部分:
先看上面的输入部分:
首先是浮空输入、上拉输入、下拉输入:
上拉/下拉/浮空是根据上下拉电阻处开关的开或关命名的。
当上面的开关接通为上拉输入,没有信号输入时由于上拉电阻接VDD的作用默认输入为高电平。
当下面的开关接通时为下拉输入,无信号输入时由于下拉电阻接VSS的作用默认输入为低电平。
ps:上下拉电阻均为弱上下拉。由于上下拉电阻的保护作用电流不会过大。上拉和下拉电阻起一个将不确定信号钳制在高/低电平的作用。
当开关均不接通时为浮空输入,此时输入电平不确定易受影响,完全由外部的输入决定。由于输入阻抗较大,一般将浮空输入用于标准通信协议的I2C、USAR的接收端;
之后输入电压经过TTL施密特触发器(通过其中的有高参考电压和低参考电压的比较器)转化为稳定数字信号0/1,存储在输入数据寄存器中,在每个APB2时钟出现在IO脚上的数据被采样到输入数据寄存器。对输入数据寄存器的访问读取可以知道IO状态。
接着是模拟输入模式:
此模式输入电压不经过施密特触发器,所以输入的是模拟信号,可用于片上外设
由于不经过施密特触发器所以读取输入数据寄存器时数值为0
还有就是复用功能输入:
经过施密特触发器后的数字信号通过此线路传输到其他片上外设,由外设读取该引脚状态。
此时输出部分仍可使用而在之前的模拟输入/浮空输入/上拉输入/下拉输入中
输出缓冲器被禁止,输出相当于断路,所以输入时输出无效。
再者是输出模式:
经过保护电路向下之后是输出驱动电路。输出驱动电路有P-MOS管和N-MOS管,两者的工作由输出数据寄存器进行操纵,通过修改寄存器的值时两个MOS管进行激活操作,进而我们可通过修改输出数据寄存器的值就可以修改 GPIO 引脚的输出电平。
首先是推挽输出:
P-MOS和N-MOS均激活,输出寄存器置1,向驱动电路输入高电平,P-MOS管导通,N-MOS关闭,对外输出高电平。寄存器置0,向驱动电路输入低电平,N-MOS导通,P-MOS关闭,对外输出低电平。
输出高电平时P管负责灌电流--即为“推”,输出低电平时,N管负责拉电流----即为“挽”。这使得其负载能力(电路的带负载能力(与电源内阻类似))大大提高。
在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。
推挽输出等效电路
其次是开漏输出:
开漏输出模式下P-MOS完全不工作,输出高阻态(相当于开路)
控制输出为低电平时N-MOS导通,输出接地;为高电平时,两管都关闭,引脚不为高电平也不为低电平,为高阻态。
显然在这种情况下无法输出高电平,但是我们可以在外部根据实际需要设计加上上拉电阻,由上拉电阻和上拉电源向外输出高电平。这反而成了开漏模式的一个优点。
同时根据参考手册,开漏模式时对输入寄存器的读访问可以得到IO状态,那开漏输出模式+外部上拉就相当于51的准双向IO了。
开漏输出等效电路
剩下的两个复用开漏输出和复用推挽输出在理解上述的两个输出之后就很简单了,实际上只是将输出转移到片上外设上,使片上外设对GPIO引脚进行控制。
可以看到在输出模式中虽然上拉下拉被禁止,但是现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,施密特触发输入被激活,即输出模式下仍可接收输入。
三、GPIO使用步骤、库函数使用以及一些注意点
1.使用步骤:①开启GPIO外设时钟使其使能----利用RCC(reset and clockcontrol)配置
使用库函数RCC_APB2PeriphClockCmd()
②配置GPIO参数,初始化GPIO 使用函数GPIO_Init()
库函数中定义了结构体配置GPIO参数。
2.常用标准库函数:
3.注意点:
①GPIO引脚速度:这是指I/O 口驱动电路的响应速度而不是输出信号的速度(芯片内部在 I/O 口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动 模块,达到最佳的噪声控制和降低功耗的目的。
输出模式下有三种速度可选择:
Low - 2MHz:如USART 串口
Medium - 10MHz :如I2C接口
High - 50MHz:如SPI接口
②GPIO翻转速度:
输入/输出寄存器的值反映到外部引脚的高低电平的速度。
影响因素: 上拉电阻的阻值越大(OD),RC 延时越大,翻转速度越慢,功耗也越大。
③GPIO输出信号速度:
输出信号的 速度与程序有关,程序控制输出信号的频率