GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
被称为输出数据寄存器、位设置\清除寄存器、输入数据寄存器的内存单元是程序与硬件电路的连接桥梁,其按照每32位二进制0\1数据为一组,存储着芯片中特定电路的开关信息。通过程序对寄存器中的数据修改,来改变芯片中某功能的电路的开关,或者通过程序对寄存器数据进行读取。
施密特触发器:
TTL肖特基触发器(施密特触发器)就是为了防止在某一个临界电平的情况出现各种情况的抖动出现,为了稳定我们的输出而设计的。施密特触发器采用电位触发方式,其状态由输入信号电位维持;对于负向递减和正向递增两种不同变化方向的输入信号,施密特触发器有不同的阈值电压。
作用是稳定电平,应用于波形的整形和变换:整形时,将不好的矩形波变为较好的矩形波;波形转换时,将三角波、正弦波和其他波形转换为矩形波。由于外部输入的电压不稳定,并不能一直稳定在标准的3.3V或0V,所以简单的规定一个参考电压,高于参考值视为高电平,低于参考值的视为低电平。使用一个比较器 可以实现此效果。
如果输入电压中噪声较多,在参考电压中徘徊,会导致高低电平快速变化无法准确测量当前电平,所以对比较器改造,形成施密特触发器,产生两个参考电压。当输入电压高于高参考电压,则输出高电平;输入电压低于低参考电压,则输出低电平;在两者之间则维持原本的信号不变
GPIO种类
CH32V307VCT6提供了 5 组 GPIO 端口,共 80 个 GPIO 引脚。每个引脚都可以由软件配置成输出(推挽或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数 GPIO 引脚都与数字或模拟的复用外设共用。除了具有模拟输入功能的端口,所有的 GPIO 引脚都有大电流通过能力。提供锁定机制冻结 IO 配置,
以避免意外的写入 I/O 寄存器。
CH32V307VCT6共有7组IO口,每组16个,共16×5=80个,分别为:
GPIOA——>PA0、PA1、PA2…PA15
GPIOB——>PB0、PB1、PB2…PB15
.
.
.
GPIOE——>PE0、PE1、PE2、…PE15
GPIO输入输出的8种模式
GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和4种输出模式(开漏输出、推挽输出、开漏复用输出、推挽复用输出)。同时,GPIO还支持三种最大翻转速度(2MHz、10MHz、50MHz)。
每个I/O口可以自由编程,但I/O口寄存器必须按32位字被访问。
程序中标识 | 模式 |
---|---|
GPIO_Mode_AIN | 模拟输入 |
GPIO_Mode_IN_FLOATING | 浮空输入 |
GPIO_Mode_IPD | 下拉输入 |
GPIO_Mode_IPU | 上拉输入 |
GPIO_Mode_Out_OD | 开漏输出 |
GPIO_Mode_Out_PP | 推挽输出 |
GPIO_Mode_AF_OD | 复用开漏输出 |
GPIO_Mode_AF_PP | 复用推挽输出 |
下面将具体介绍GPIO的这八种工作方式:
输入模式
上拉输入模式
- 上拉电阻:把不确定的信号通过电阻连接到高电平电信号初始化为高电平
- 下拉电阻:把不确定的信号通过电阻连接到低电平电信号初始化为低电平
默认情况下输入引脚数据为1,高电平。
上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在高电平(自己理解:上拉电阻连接电压);并且在I/O端口输入为低电平的时候,输入端的电平也是低电平(自己理解:上拉电阻上的电压和端口导通)。
下拉输入模式
默认情况下输入引脚为0,低电平。
下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。
浮空输入模式
浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。
通常用于IIC、USART。
模拟输入模式
模拟输入模式下,I/O端口的模拟信号(电压信号(电压值),而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。模拟信号一般:3.3v 5v 9v。
输出模式
开漏输出模式
可以输出0和1,适用于电平不匹配场合,要得到高电平需要上拉电阻才行。
开漏输出模式下(上拉电阻+N-MOS管),只有N-MOS工作,P-MOS一直处于断开状态,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。
这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;
当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。
同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平。
开漏复用输出模式
开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。
片内外设功能:TX1,MOSI,MISO,SCK,SS
推挽输出模式
可以输出高低电平0和1,适用于双向IO使用。具有一定的电压与电流驱动能力,可以直接驱动合适的元件工作,若需要更高或者更低的电压驱动,这就需要开漏模式。
推挽输出模式下(P-MOS管+N-MOS管),通过设置位设置/清除寄存器或者输出数据寄存器的值,途经P-MOS管和N-MOS管,最终输出到I/O端口。
这里要注意P-MOS管和N-MOS管,当设置输出的值为高电平的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定:高电平;
当设置输出的值为低电平的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定:低电平。
同时,I/O端口的电平也可以通过输入电路进行读取;注意,此时I/O端口的电平一定是输出的电平。
推挽复用输出模式
推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。
片内外设功能IIC的SCL、SDL
推挽输出与开漏输出的区别
推挽输出 | 开漏输出 | |
高电平 | P-MOS激活 N-MOS断开 3.3V | P-MOS断开 N-MOS断开 由外部电路决定 |
低电平 | P-MOS断开 N-MOS激活 0V | P-MOS断开 N-MOS激活 0V |
优点 | 可以直接输出3.3V | 配合外部电路更加灵活 |
缺点 | 只能输出3.3V | 高电平实际是高阻态 无法输出电流 |
点击数:6