你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F103:GPIO八种工作原理详解

[复制链接]
STMCU小助手 发布时间:2022-5-3 14:17
一、GPIO简介
+ W3 ]' r5 A6 q# e& l( oGPIO就是通用I/O(输入/输出)端口,是STM32可控制的引脚。
4 F$ Y+ \  k4 X7 e1 c8 L5 W9 CSTM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
, A3 G0 g2 p% B4 N
4 O7 V  F4 d- D, y二、GPIO工作模式# J8 P" n/ z  `, ]+ h( v8 }
1. 四种输入模式  [7 D. Q: J0 a  `1 Y. p; u. c
GPIO_Mode_IN_FLOATING 浮空输入模式6 B3 @  n2 h0 h- ~
GPIO_Mode_IPU 上拉输入模式
4 V5 Z  z* Q: K$ `GPIO_Mode_IPD 下拉输入模式
8 {/ q  |6 [- `  _/ d! j; ]GPIO_Mode_AIN 模拟输入模式
# @0 o4 w/ C+ I" L7 t5 c: K7 H2. 四种输出模式
! s. k+ K4 m3 QGPIO_Mode_Out_OD 开漏输出模式
3 r# _- p3 l3 c- X4 uGPIO_Mode_Out_PP 推挽输出模式( b' n+ [$ Z" B/ Q
GPIO_Mode_AF_OD 复用开漏输出模式
0 x" x+ p: h- ZGPIO_Mode_AF_PP 复用推挽输出模式8 h1 }2 D* b7 r) C; O' i
三、GPIO工作原理解析2 B' p' S" v1 d* T0 b
1. I/O端口的基本结构框图
, W+ l; R% T/ d+ o3 r" e& l2 \
0 A+ n# z# u6 `2 g; w: H: Y+ w
`4X~)N9~3[_~%JQZU__HBP0.png
3 |3 g1 r& [8 ]9 @& Z: b- A6 ?
! G0 N7 H1 U! {) @- O% |6 K, p" ]5 \2. I/O端口的基本结构介绍

4 a7 b! c/ s. R保护二极管2 r7 n0 F2 S* Y  Y, f$ |/ U& r/ c
作用: 防止引脚外部输入过高和过低的电压,防止不正常电压引入芯片,导致芯片烧毁。* J# B6 r( p2 J5 V* g! ^% U, Q
当引脚电压高于VDD时,上方的二极管导通。
4 {. E) b5 K( C% s4 B当引脚电压低于VSS时,下方的二极管导通。& @! G( q( j8 a
8 O1 _+ x/ B. ^. U* C8 G/ W) Y
上拉电阻和下拉电阻4 N4 m8 ]6 s8 {
作用: 控制引脚默认状态的电压。( K& I( v: `+ S
开启上拉的时候,引脚默认电压为高电平。
, L* F( v4 h# U; F; R( U开启下拉的时候,引脚默认电压为低电平。
; \7 A  ~4 A& ^. Z! p; s* r) w
4 i4 ?- E  ]) r# k5 aTTL肖特基触发器
' P) @; z0 `5 `( M% xTTL肖特基触发器其实可以理解为用肖特基管构成的施密特触发器。: C1 c8 m8 V2 Y2 T- C7 c$ |, R
作用: 将相对缓慢变化的模拟信号变成矩形信号。6 _+ D: I3 q7 P" |  E
当输入电压高于正向阈值电压,输出为高。2 Q; {0 Z- F0 ]4 e- N3 B6 b
当输入电压低于负向阈值电压,输出为低。
; V; W* a2 I( b1 K  F; ^4 H  V
7 g# v" R  d$ _1 OP-MOS管和N-MOS管( g: g# }- e. M# b9 q
作用: 使得GPIO具有“推挽输出”和“开漏输出”的模式。6 n+ [; I% V) E
P-MOS管: MCU输出为 1 导通,低电平关闭。& S4 I8 {9 k7 b0 v
N-MOS管: MCU输出为 0 导通,高电平关闭。
  m8 b1 y" q& O0 c/ ^3 q: ~
7 P( o) m" v+ N  S, Z- n3 |. e3. GPIO工作模式解析1 M( _) Y, y* Q2 m8 K3 Q
浮空输入模式: o6 C) A) ]$ W% O
浮空输入模式下,I/O端口的电平信号直接进入到输入数据寄存器。# \0 t: i7 s4 a" g
MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定。. X- i$ g6 ^% R" {/ T& s
* F# x, A0 R% {+ m
EEJVLSJMHEE`NX1}XUZF6MQ.png 9 G( e  {+ p, R4 T) p' M9 U

4 s& u6 U3 B" v* _ Q5VUKIL18%U)E%LHF]N5L0F.png
* C/ w2 i- C4 A8 ]4 x% V
3 E5 f8 m/ U7 @# U. [- {2 l: Q' G上拉输入模式
2 l; j$ `( e4 G5 k0 N% [上拉输入模式下, I/O端口的电平信号经过上拉电阻进入到输入数据寄存器。
, N' s6 h: {, w+ b
0 X) M) e* i8 u (X86[7RK{8IPV{0}KJKWDWP.png
' k( _3 e, N3 g1 {( D$ p* }- M8 `) F4 A! t7 Y- }5 [
RC9`5W{GN4QP%F~B0DY~S05.png 4 y9 C: g+ e6 i2 c% f' X( s1 Q( u

5 Y: b: ]* D+ d) Z7 V; E! G6 oSTM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。
  U8 A# g* K; o& k1 U+ g- L. ]( I
! a9 N# D6 F5 r2 c$ d; ~6 b下拉输入模式
$ t8 m! Y  ~/ g+ W$ C+ z9 C( b9 ^- s下拉输入模式下, I/O端口的电平信号经过下拉电阻进入到输入数据寄存器。8 m' S2 G: R! f: l
# J, q! J+ X0 y  C/ e2 H5 M6 g; ]" a
9{N}DAO{NV`P9YWL0CJ[W{V.png
* Z( M2 J7 m! o2 r; r
; S+ [. Y0 E4 c9 D5 d4 b* v- } %S}J72)0M{SBRIL0KI~9)E0.png
9 U$ r  A+ V  k6 l6 k* c- j& D5 k& ?1 `7 }
模拟输入模式

; _4 u! d/ ^! a1 d: P* D* I$ Q模拟输入模式下, I/O端口的电平信号不经过TTL肖特基触发器,直接进入ADC模块,并且输入数据寄存器为空 ,MCU不能在输入数据寄存器上读到引脚状态。
& N1 B! u% |, ^: y. F+ x2 c在模拟输入模式下,上拉电阻和下拉电阻是不起作用的,即使配置上拉和下拉模式,也不会有作用。" Y& L4 F2 b- y6 U1 r  E

2 H4 n; g0 l( c ${LA~36`9~4@066WCG{N{63.png   u& u: p1 e; S, G

0 D9 F8 B) R7 s0 y* _! m5 `; j开漏输出模式
1 e4 y6 d3 j) J( P5 ^. E+ @/ Z; ~# R
开漏输出模式下, P-MOS管不工作,只有N-MOS管工作,MCU只能控制输出低电平。
; ~' n8 Y3 _# d8 RMCU输出低电平的时候,N-MOS管导通,I/O引脚输出低电平。
! ]; P. {& r- ~3 g: H2 x% V9 C( ?MCU输出高电平的时候,N-MOS管关闭,I/O引脚悬空状态。
' D5 u1 g, n. }. n' L
( @) [& v0 ?+ W) C6 E VBHP}RR$Q(TWI[HHT{HO$`K.png % ?- _. s0 ~- r2 C

5 f( v$ u$ \5 h3 m推挽输出模式
( M: W- F% P% ]$ H8 R( @推挽输出模式下, P-MOS管和N-MOS管都工作,MCU可以控制输出高电平和低电平。
4 `& u3 K$ T4 S% {4 G0 C& ~; eMCU输出为 0 的时候,N-MOS管导通,I/O引脚输出低电平。
$ e+ y$ b: j" k0 a. q7 O* S* d! D! r/ uMCU输出为 1 的时候,P-MOS管导通,I/O引脚输出高电平。
; F* u  {% a  w% X- f
- m# u& T6 y$ F0 K JU}L4ELAYLJW6ZEJ3A`CGQT.png # o: Q+ J) x- L  `* t9 l
! }5 K( E7 u) s
复用开漏输出模式
: [7 f& P  Q; i/ e复用开漏输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。
( a$ X, S: ]- W3 e; W
* N. {8 q) S! v/ w8 ? UNH3DR2C{7(G]8HY{KW~6.png
6 k2 a' [( y2 t& D4 ]9 h# D6 ]9 E6 C; b6 r. |
复用推挽输出模式
' L% {0 N' m# B! j
复用推挽输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。- u6 l, \5 i' V* ]6 h% v

9 h) O5 A- u+ f$ ` E)%SN~($X2R5{]`YL0K7M]F.png 7 |: y* ~* B+ v& y
8 k- P% v% A9 K: D
! J2 o( {" X( V* q: L
赞 收藏 评论0 发布时间:2022-5-3 14:17

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版