
一、GPIO简介 GPIO就是通用I/O(输入/输出)端口,是STM32可控制的引脚。$ Q. J0 W8 N8 g! I' |7 X1 l STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。; i) \0 h- I5 y/ J) d; U* `8 M) U 4 _. T" s( |" h5 u. j 二、GPIO工作模式 1. 四种输入模式* w6 Q3 z5 x$ [+ {5 d& h4 c GPIO_Mode_IN_FLOATING 浮空输入模式 GPIO_Mode_IPU 上拉输入模式 GPIO_Mode_IPD 下拉输入模式 GPIO_Mode_AIN 模拟输入模式 2. 四种输出模式 GPIO_Mode_Out_OD 开漏输出模式5 B1 ?5 y3 H/ Y' w. n GPIO_Mode_Out_PP 推挽输出模式 GPIO_Mode_AF_OD 复用开漏输出模式; o r4 A6 K6 [7 k! S7 G0 z GPIO_Mode_AF_PP 复用推挽输出模式 三、GPIO工作原理解析 1. I/O端口的基本结构框图+ a( B, T" h) I: Y' ], G% n$ d ![]() 2. I/O端口的基本结构介绍8 K8 f! X% D+ A9 l+ R* P+ F# j 保护二极管* ^) x( z \0 s- d7 x 作用: 防止引脚外部输入过高和过低的电压,防止不正常电压引入芯片,导致芯片烧毁。 当引脚电压高于VDD时,上方的二极管导通。 当引脚电压低于VSS时,下方的二极管导通。4 Z- ?2 m' D9 Q# S/ C3 I 上拉电阻和下拉电阻& H% |6 k, F4 l9 V 作用: 控制引脚默认状态的电压。 开启上拉的时候,引脚默认电压为高电平。% J" J4 B7 x, T% b5 v 开启下拉的时候,引脚默认电压为低电平。 0 n, Q9 l3 l( f# c TTL肖特基触发器 TTL肖特基触发器其实可以理解为用肖特基管构成的施密特触发器。 作用: 将相对缓慢变化的模拟信号变成矩形信号。$ N' L! q% g3 F5 @9 X( W 当输入电压高于正向阈值电压,输出为高。" @8 n$ ~+ T ^# c* n' c. N 当输入电压低于负向阈值电压,输出为低。 4 f: }; D& C8 `" S; I+ b P-MOS管和N-MOS管9 r1 m1 x- t0 m 作用: 使得GPIO具有“推挽输出”和“开漏输出”的模式。 K& S( s9 g5 k( w6 A/ a P-MOS管: MCU输出为 1 导通,低电平关闭。 N-MOS管: MCU输出为 0 导通,高电平关闭。% M7 S: B/ s* ^5 b% a. S& T % a2 L1 x9 G) H' h 3. GPIO工作模式解析& j2 e6 T7 j0 Y6 u( K 浮空输入模式! h3 N7 K6 U( ], M 浮空输入模式下,I/O端口的电平信号直接进入到输入数据寄存器。 MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定。6 }7 h/ _- u8 M0 v$ N# [1 Q $ T7 r* G4 T5 J) w+ h( R1 n ![]() 1 d2 K a$ }& V: U \- i ![]() D! r2 N+ _, a! g- I5 O 上拉输入模式 上拉输入模式下, I/O端口的电平信号经过上拉电阻进入到输入数据寄存器。 ![]() $ P* l* R9 _% ~) v9 ?; T! @ ![]() STM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。8 s" I0 j1 a \7 H$ Z, p$ v 下拉输入模式 下拉输入模式下, I/O端口的电平信号经过下拉电阻进入到输入数据寄存器。$ R8 Y5 c! J) x ![]() ![]() 模拟输入模式 模拟输入模式下, I/O端口的电平信号不经过TTL肖特基触发器,直接进入ADC模块,并且输入数据寄存器为空 ,MCU不能在输入数据寄存器上读到引脚状态。 在模拟输入模式下,上拉电阻和下拉电阻是不起作用的,即使配置上拉和下拉模式,也不会有作用。 ; R5 G4 C/ Y% M. [* s ![]() / S& m' s, T0 b' t: M# `: |1 _ 开漏输出模式- v( q( }" Q9 N3 X. H$ o( P, l, c 开漏输出模式下, P-MOS管不工作,只有N-MOS管工作,MCU只能控制输出低电平。0 x) V# ~" W, d5 U( j MCU输出低电平的时候,N-MOS管导通,I/O引脚输出低电平。 MCU输出高电平的时候,N-MOS管关闭,I/O引脚悬空状态。 8 q3 x# n+ P# s) k/ e# g ![]() + @1 D0 h; o8 `" e% C( } 推挽输出模式$ l& Y( ~) O4 K9 K2 v7 d. {! e! V 推挽输出模式下, P-MOS管和N-MOS管都工作,MCU可以控制输出高电平和低电平。 MCU输出为 0 的时候,N-MOS管导通,I/O引脚输出低电平。0 m' v# u+ C4 ~0 Q$ J MCU输出为 1 的时候,P-MOS管导通,I/O引脚输出高电平。3 K4 f8 c! ^& D& |( x! H ![]() $ M7 {- n, Q3 | 复用开漏输出模式" n" ?3 z5 Q0 y0 O( d 复用开漏输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。 ' D: F5 ]% p. v) F6 Q _ ![]() - B6 l5 O8 f& \2 V 复用推挽输出模式" f! \, A( b1 g* J1 l6 W* T 复用推挽输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。 ![]() " {* ^1 R: e; ^ 1 F8 L/ t! t- }! Z" [ |