系列教程链接
HAL库编程点灯篇https://blog.csdn.net/oHaoEr/article/details/122999523
一 GPIO简介
1.1 概述
GPIO(通用输入输出端口)即芯片的IO管脚,STM32F103系列中不同产品有不同数量的IO管脚。
下图是其中一个IO管脚的示意图。图中绿色部分即表示芯片的引脚,图中的黄色部分为芯片的钳位保护电路。
1.2 钳位保护电路
钳位电路是指利用二极管正向导通压降相对稳定,且数值较小(有时可近似为零)的特点,来限制IO管脚的电位范围。当该点电压超过VDD+0.7V时,上面的二极管导通;而当该点电压小于VSS-0.7V时,下面的二极管导通。
该电路使得单片机引脚的输入电压限制(钳位)于-0.7V~5.7V之间。
- 当管脚输入电压高于VDD
这里的VDD指的是单片机的供电电压3.6V或者5V。STM32单片机的引脚可以作为输入,接收外界的电压输入。当出现输入电压高于单片机的内部允许的电压时会烧毁单片机,为此ST公司为了保护芯片在内部设计了钳位电路,即在引脚的供电电压和引脚之间添加了一个二极管。
该钳位电路工作原理如下:
由于二极管的导通电压是+0.7V,当输入引脚与VDD间的电压差即Vpin-VDD>0.7V时,二极管导通形成通路,如下图所示。
- 当管脚输入电压低于Vss
这里的Vss一般指接地。STM32单片机的引脚可以作为输入,接收外界的电压输入。当出现输入电压高于单片机的内部允许的电压时会烧毁单片机,为此ST公司为了保护芯片在内部设计了钳位电路,即在引脚的供电电压和引脚之间添加了一个二极管。
该钳位电路工作原理如下:
由于二极管的导通电压是0.7V,当输入引脚与Vss间的电压差即Vss-Vpin>0.7V时,即外界输入负电压信号,二极管导通形成通路,如下图所示。
1.3 GPIO工作模式
STM32F103XX产品单片机的IO引脚工作模式可划分为二类八种。分别是4种输入模式和4种输出模式。
引脚状态 | 工作模式 |
---|---|
输入模式 | 模拟输入 |
浮动输入 | |
上拉输入 | |
下拉输入 | |
输出模式 | 推挽输出 |
开漏输出 | |
复用推挽输出 | |
复用开漏输出 |
二 GPIO输入模式
2.1 模拟输入模式
STM32F103XX工作在模拟输入模式时,输 入链路中斯密斯缓冲器被关断,输出链路的输出控制器也被断开。模拟输入模式下,STM32单片机的IO引脚将外界输入信号直接传输给内置的ADC电路进行信号采样。
2.2 浮空输入模式
STM32F103XX工作在输入模式时,用于输出模式的缓冲器就会被禁用。下图中的施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以抗干扰能力较强。
施密特触发器将模拟信号波形整形为数字电路能够处理的方波波形。
浮空输入模式下,上拉电路与下拉电阻均断开,施密特触发器的输入信号完全取决于引脚的电压状态,施密特触发器将模拟信号波形整形方波波形,单片机按照APB2时钟频率对转化的数字信号进行采样存储于Input Data register寄存器中。
2.3 上拉输入模式
单片机配置成上拉模式后,芯片内部的施密特触发器接入,并将一电阻接入VDD与施密特触发器的输入端之间,如下图所示。
单片机配置成上拉模式后,分两种情况分析讨论:
- 当IO引脚没有输入时
由于VDD为芯片供电电 压,此时施密特触发器输入电平为高电平,Input Data register寄存器经采样得到的信号为高电平。
- 当IO引脚接地即输入为低电平时
VDD的电流经上拉电阻,从图中可知,施密特触发器(TTL Schmitt trigger)的输入端与芯片引脚直接相连,当外部芯片引脚接地时,相应地施密特触发器(TTL Schmitt trigger)的输入端为低电平。
经上述分析可知,该输入模式可用于按键检测应用,即芯片引脚与按键相连接,按键此时接地,可输入低电平。
2.4 下拉输入模式
单片机配置成上拉模式后,芯片内部的施密特触发器接入,并将一电阻接入VSS与施密特触发器的输入端之间,如下图所示。
单片机配置成下拉模式后,分两种情况分析讨论:
- 当IO引脚没有输入时
由于Vss配置为地,此时施密特触发器输入电平为低电平,Input Data register寄存器经采样得到的信号为低电平。
- 当IO引脚输入为高电平时
从图中可知,施密特触发器(TTL Schmitt trigger)的输入端与芯片引脚直接相连,当外部芯片引脚接3V高电平时,相应施密特触发器(TTL Schmitt trigger)的输入端为高电平。
经上述分析可知,该输入模式可用于按键接高电平时的检测应用。
2.5 复用输入
STM32F103XX在使用片上外设如串口通信等,其信号流入下图所示。信号经芯片引脚进入斯密斯触发器整形后,直接流向对应的内部外设。
三 GPIO输出模式
3.1 推挽输出模式
单片机处于输出模式时,打开输出缓冲,同时输入模式中的斯密斯触发器也同时被激活。
单片机配置成推挽输出模式,当 Output Data register 的值为0时,N-MOS 导通,输出低电平。当 Output Data register 的值为1时,P-MOS 导通,输出高电平。
该模式可以输出0或1。
3.2 开漏输出模式
单片机配置成开漏模式时,电路原理图如下所示,此时需要在芯片引脚处外接工作电压5V作为上拉电压,当 Output Data register 的值为0时,N-MOS导通,输出0;当 Output Data register 的值为1时,芯片引脚为高阻态。
- 开漏输出特点:
1)开漏输出的这一特性可以实现"线与"功能,多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。
2)用户可以根据项目需要设计不同的上拉电阻,调整上拉电压,调整输出电流增强芯片的驱动能力。
3.3 复用开漏输出模式
如下图所示,单片机的IO引脚供内核感知外界的电压,此时功能较为单一;片上集成的外设可通过IO引脚复用功能与IO引脚连接获取外界输入,再将处理后的数据交于内核处理。
单片机内部集成了诸如USART、CAN、SPI等外设, 这些外设需要借用单片机的对外引脚,这一用法称为单片机引脚的复用功能,同一个引脚既可以单片机使用也可给片上外设使用。
单片机配置成复用模式时,此时的输入信号来自片上外设,同时输入线路中的斯密斯触发器也被激活,而输入链路中的上拉和下拉电阻禁用。
和3.1节、3.2节一样,在开漏模式下,单片机会读取 Input Data register的值获取IO引脚的状态;在推挽模式下,单片机会读取 Output Data register的值获取最后一次输出的值。
3.4 复用推挽输出模式
单片机内部集成了诸如USART、CAN、SPI等外设, 这些外设需要借用单片机的对外引脚,这一用法称为单片机引脚的复用功能,同一个引脚既可以单片机使用也可给片上外设使用。
在推挽模式下,单片机会读取 Output Data register的值获取最后一次输出的值。
使用单片机中的USART时,芯片引脚可以配置成复用推挽输出模式,见下表。
四 总结
经过上面学习可知,单片机的IO引脚可配置成二类八种模式,输入状态对应4种模式;输出状态下对应4种模式。具体应用中应当如何选取正确的配置呢?此时取决于具体应用情况,例如对于串口通信而言,当单片机的IO引脚作为USART的Tx(即发送引脚)时,此时该引脚应配置为复用推挽输出模式;而当单片机的IO引脚作为USART的Rx(即接收引脚)时,此时该引脚应配置为浮空输入或者上拉输入。