STM32中的GPIO模块
GPIO,中文全称为通用输入输出(General Purpose Input/Output),是SOC芯片中的一个重要模块,本文是对自己学习GPIO模块过程的总结。
对于我所学习的STM32F01x系列,配置某一引脚为GPIO功能时涉及两个步骤:开启对应GPIO模块的时钟、配置引脚的输入/输出和电气属性。对于其他的ARM架构的芯片,其配置过程其实也大同小异,基本的就是涉及开启对应模块/控制器的时钟、引脚的复用功能配置、GPIO的输入/输出设置、电气属性配置,额外的可能就是涉及和其他外设的交互,如中断控制器。
对于STM32f10x,芯片上IO端口的基本结构如图

从结构图可以看出IO端口结构分为输出和输入两部分
(1)端口输出
对于端口的输出部分,输出控制器可以分别来自输出数据寄存器和片上外设两部分。因此端口在作为输出时,要进行复用功能配置。当端口作为GPIO输出时,输出电平高低由输出数据寄存器决定,此时由外设到输出驱动器的线路断开。同理,当端口作为复用功能输出时,输出数据寄存器到输出驱动器的线路断开,输出由片上外设控制。在输出驱动器中,通过两个MOS管控制端口的推挽、开漏。当两个MOS管均打开时,此时是推挽输出模式,端口具有较强的驱动能力。当上面的P-MOS管断开时,当输出控制器输出高电平时,N-MOS管不导通,此时端口处于高阻态,当输出控制器输出低电平时,N-MOS管导通,此时端口输出低电平。这种输出模式叫做开漏输出模式。
(2)端口输入
端口作为输入状态时,信息流首先通过输入驱动器,然后流入片上外设和输入数据寄存器。需要注意的是,输入是不需要复用功能配置的,默认流入所有连接的通路(当然,对于其他一些SOC,可能复用输入功能也是需要配置)。基于这种特性,端口作为输出时,输出的高低电平也会通过输入线路流入输入数据寄存器和所连接的片上外设。因此可以读取端口的输出电平状态。根据输入驱动器中电阻的上下拉,可以分为输入上拉、输入下拉和浮空两种状态。
综上,根据端口(引脚)的输入上下拉、MOS管的开闭状态、复用状态,端口的模式可分为八种模式。


浙公网安备 33010602011771号