找回密码
 注册
关于网站域名变更的通知
查看: 36|回复: 0
打印 上一主题 下一主题

STM32的GPIO结构图解析

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
     楼主| 发表于 2024-11-13 17:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    7 C8 m) ~- I# {5 n. n: M) T. I
    6 @0 c4 @: F, }4 f' L) t7 B, ]) Z
    GPIO共有8中设置模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、推挽式复用功能,开漏复用功能,共4种输入,2种输入,2种复用功能。
    " y/ Q% j4 T" B  s" n+ t4 C4 O2 J6 r5 a/ s- m; a
    2、模式说明
    ' F; s9 H6 S" x
    9 c$ k1 T# {8 K0 o( {  W; o①浮空输入
    ) P. D4 p1 J" Q7 |6 N. L+ }
    9 Q, E1 |# G, c8 r图中施密特触发器是开启的,IO口的状态可以直接送到输入寄存器中,CPU可以直接读取输入寄存器;
    ( A, y# f3 L% m7 }
    + v2 t4 N- d) o3 [1 {& W0 ^在上图中,阴影的部分处于不工作状态,尤其是下半部分的输出电路,实际上是与端口处于隔离状态。
    + q0 z( m% u( [' s
    $ |; N7 u3 e5 o  a黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的IO端口进入STM32,经过编号2的施密特触发器的整形送入编号3的输入数据寄存器,在输入数据寄存器的另一端编号4,CPU可以随时读出IO端口的电平状态。
    $ P- [  X1 a+ T( `* a
    6 S# g& m0 R; Y$ F% h9 C- g( f; E②上拉输入, E. s1 h6 I2 T! q' \$ R1 U7 D! _

    & K$ h6 y0 l" w上图是STM32的GPIO带上拉输入模式的配置。与前面的浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,根据STM32的数据手册,这个上拉电阻阻值介于30K~50K。
    / m$ L6 i7 h! x. X% T7 X
    8 [' ~% C5 J& e  J# [( H同样,CPU可以随时在输入数据寄存器的另一端,读出IO端口的电平状态。
    8 C8 h9 s, F  ~/ Q& o! C; C) s. r$ Z) Q; U
    ; @$ _2 m; ]% f9 U③下拉输入% G( g1 P) Z) ?" V# h3 L8 A

    ) L! R$ u3 o" }④模拟输入
      [' R" r- G/ k7 n
      ?2 a. Y0 s) K8 n6 |& l! j) z施密特触发器是关闭的,信号直接到ADC输入;+ V! s, A$ [# N8 w
    / b. n/ I: e+ C8 D
    STM32的模拟输入通道的配置则更加简单,信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块。
    5 j" \2 |9 D+ s/ l
    5 w: I% A+ q$ P这里我们看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在输入数据寄存器上读到有效的数据。) x! A) a& `7 }& o5 E; J* b
    . O, G6 o5 n7 A/ }7 m" u
    ⑤开漏输出模式9 }  j7 Z, n/ l# g* I

    0 ~7 b3 v# c; e. a# y% |当CPU在编号1端通过“位设置/清楚寄存器”或“输出数据寄存器”写入数据后,该数据位通过编号2的输出控制电路传送到编号4的IO端口。
    / E2 \" m) o  V
      Y7 X! K, }8 @6 c
    : ]3 P6 }" `  W' e+ D0 F. k3 m  r* Q* t' b* |3 C
    如果CPU写入的是逻辑1,则编号3的N-MOS管将处于关闭状态,此时IO端口的电平将由外部的上拉电阻决定,如果CPU写入的是逻辑0,则编号3的N-MOS管将处于开启状态,此时IO端口的电平被编号3的N-MOS管拉到了VSS的零电位。8 h- y' x" J4 K  i3 Q1 b' J
    - w9 ?, C+ v4 O5 ]
    在上图的上半部,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控IO端口的状态;通过这个特性,还实现了虚拟的IO端口双向通信,只要CPU输出逻辑1,由于编号3的N-MOS管处于关闭状态,IO端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑1。; C- U& s, ~" ~' P$ [& m
    3 m/ ?% J6 {  f. }# F4 V
    GPIO口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在IO口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高的频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
    * ]5 n$ _) H! D% B0 T( n" T
    1 R/ W5 @6 s. d4 a. n⑥开漏输出复用功能
    & C+ F1 Z2 u% ?
    ; h! H: p3 g. v# D2 G7 D⑦推挽输出模式( _2 O2 |) l5 ^( v
    ! l+ }, m1 j# p* ~% e4 t
    ⑧推挽复用输出模式( D2 F- u: N/ o1 C" {0 i/ A2 W' P

    # W" e/ Y/ ]+ y5 c( [. _% oGPIO推挽复用输出模式,编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了,并和片上外设的输出信号连接。我们将GPIO配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定,其它部分与前述模式一致,包括对“输入数据寄存器”的读取。
    ( p4 H  X" m2 i5 [. ^" ?% w) ?8 Q
    + R) ]8 }: \5 c  p$ ^( X3、应用场合
    , Z5 u2 K+ Y+ r5 ~( F
    / Z4 K4 z$ C- g$ `3 Z  G①上拉输入、下拉输入可以用来检测外部信号;例如,按键等;: Q, r% [& q' e! d: \
    & Z( Z* h8 V' S( R2 y& O" r7 p" J
    ②浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的I2C、USART的接收端;4 L" i4 q8 l0 E' ^: R

    ) a$ ^7 [+ u/ ^- e) d③普通推挽输出模式一般应用在输出电平为0和3.3V的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部一个上拉电阻,电源为5V,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V电平。% Y) ~2 V. q! n
    2 \9 w! t1 |5 x" N
    ④对于相应的复用模式,则是根据GPIO的复用功能来选择,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。/ ~9 |* q+ _# g1 \# A+ P

    , R0 z- m+ @9 n) x  F$ W9 }* {. Z⑤在使用任何一种开漏模式时,都需要接上拉电阻。
    7 D) t4 i- e7 b6 d% f8 g2 |9 j* \. G7 e6 ]  I

    3 |  l8 `; ?6 T6 s; I- D
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-19 21:12 , Processed in 0.140625 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表