
一、GPIO简介6 z2 }2 I, k+ T- _; P8 [ GPIO就是通用I/O(输入/输出)端口,是STM32可控制的引脚。 STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 3 l6 G( `" R- E9 x 二、GPIO工作模式1 Z' a5 n! t$ p+ O# v; I 1. 四种输入模式 GPIO_Mode_IN_FLOATING 浮空输入模式 GPIO_Mode_IPU 上拉输入模式 GPIO_Mode_IPD 下拉输入模式 GPIO_Mode_AIN 模拟输入模式- ` T6 f. B7 f9 h8 [4 x7 Q% O 2. 四种输出模式) n. }: y0 ]2 d3 ~0 D- k GPIO_Mode_Out_OD 开漏输出模式 GPIO_Mode_Out_PP 推挽输出模式+ p% b+ V, ]0 V9 Y$ a2 p GPIO_Mode_AF_OD 复用开漏输出模式" E$ B' N) e; J# g- } GPIO_Mode_AF_PP 复用推挽输出模式6 t( m3 f p+ f! R: c, v 三、GPIO工作原理解析 1. I/O端口的基本结构框图 + h+ H9 m+ ?- {7 e ![]() % V" k; T6 t% h+ C- ?2 ^ 2. I/O端口的基本结构介绍- r! s3 E* L0 r$ k; H 保护二极管. I1 _% f D O" B 作用: 防止引脚外部输入过高和过低的电压,防止不正常电压引入芯片,导致芯片烧毁。! B; r6 [, ` T* r: U 当引脚电压高于VDD时,上方的二极管导通。 当引脚电压低于VSS时,下方的二极管导通。 上拉电阻和下拉电阻/ b4 T u8 e5 t, ^% q 作用: 控制引脚默认状态的电压。 开启上拉的时候,引脚默认电压为高电平。 开启下拉的时候,引脚默认电压为低电平。 3 l; j, A# @2 F" L1 z# h TTL肖特基触发器 TTL肖特基触发器其实可以理解为用肖特基管构成的施密特触发器。 作用: 将相对缓慢变化的模拟信号变成矩形信号。: n9 N6 E' p+ i5 b 当输入电压高于正向阈值电压,输出为高。 当输入电压低于负向阈值电压,输出为低。 ( E1 x& | l' i* u P-MOS管和N-MOS管 q7 B& t" V% W, V 作用: 使得GPIO具有“推挽输出”和“开漏输出”的模式。& U/ D9 G4 S1 t5 C0 a6 I+ d# t P-MOS管: MCU输出为 1 导通,低电平关闭。% ^! R. K/ \0 {# y& `4 K# u1 I% B N-MOS管: MCU输出为 0 导通,高电平关闭。 3. GPIO工作模式解析9 s) k; y; n7 } n; i7 M 浮空输入模式 浮空输入模式下,I/O端口的电平信号直接进入到输入数据寄存器。 MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定。" s- U7 s% i8 l; x' B ?; c , `& C( T+ c9 k& g ![]() ![]() 上拉输入模式1 A/ K8 T. {# I$ H7 b J: v+ k 上拉输入模式下, I/O端口的电平信号经过上拉电阻进入到输入数据寄存器。 + F- `5 Y3 p+ H* @6 U6 o ![]() W9 A9 M0 m9 w" c6 ]' O ![]() STM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。 下拉输入模式/ T/ g7 B1 G6 _2 R 下拉输入模式下, I/O端口的电平信号经过下拉电阻进入到输入数据寄存器。 I! w$ j/ c' W1 E& n5 K : I( Z) _& q: f) T9 ^, j1 m ![]() ![]() 模拟输入模式, P1 k [" a0 x! X( S8 W6 o 模拟输入模式下, I/O端口的电平信号不经过TTL肖特基触发器,直接进入ADC模块,并且输入数据寄存器为空 ,MCU不能在输入数据寄存器上读到引脚状态。 在模拟输入模式下,上拉电阻和下拉电阻是不起作用的,即使配置上拉和下拉模式,也不会有作用。, N' @. W, }/ k" h5 k) n- J% I2 [- k' ~ 1 Y9 p. d$ x" }5 d# f' a5 j) O ![]() 开漏输出模式 开漏输出模式下, P-MOS管不工作,只有N-MOS管工作,MCU只能控制输出低电平。 MCU输出低电平的时候,N-MOS管导通,I/O引脚输出低电平。9 o5 C* k L9 d* R5 b }4 I MCU输出高电平的时候,N-MOS管关闭,I/O引脚悬空状态。* o- R3 k8 ~3 R2 q+ E( p ![]() # n- t! Q" p) a. c. S) V 推挽输出模式# o: |3 C5 u9 X8 D' u( ^ 推挽输出模式下, P-MOS管和N-MOS管都工作,MCU可以控制输出高电平和低电平。$ Q$ v( w+ P2 @: W; u MCU输出为 0 的时候,N-MOS管导通,I/O引脚输出低电平。7 N0 V. U+ Y3 d0 M1 n7 |6 l5 p MCU输出为 1 的时候,P-MOS管导通,I/O引脚输出高电平。6 Z7 l6 y3 D) w( J4 K: |# S6 }5 M7 w ' P7 w7 |* g4 O5 C" n ![]() 复用开漏输出模式3 e0 h% z0 o/ m- t1 R+ K& H, } 复用开漏输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。 5 t8 t* }* i) }* { ![]() 6 n/ g0 {- l0 E- ]8 J9 M4 E 复用推挽输出模式 复用推挽输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。/ r8 F" `4 i h t' F l g8 n $ ?' S3 v' T/ w, P ![]() ) _ p0 ]7 }- g) ?/ h |