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

STM32的GPIO结构图解析

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    ) L1 u1 X0 o, z
    , i2 [0 |. J- }9 `6 \
    GPIO共有8中设置模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、推挽式复用功能,开漏复用功能,共4种输入,2种输入,2种复用功能。2 u+ {5 U9 a( P; |0 f
    7 ~) w# o* `3 s9 n7 H7 G% i6 b
    2、模式说明
    6 v8 r" x( I  q" w$ J0 C0 ?$ i6 ^" T3 P9 M- p
    ①浮空输入5 D, g1 ]8 h5 d
    - w- o' v1 Q8 f/ N1 ~: q  Y! d% A( q
    图中施密特触发器是开启的,IO口的状态可以直接送到输入寄存器中,CPU可以直接读取输入寄存器;
    / }2 ~6 s( s# ]0 K0 K& ^9 w( ]% d6 _' [
    在上图中,阴影的部分处于不工作状态,尤其是下半部分的输出电路,实际上是与端口处于隔离状态。
    5 Z$ E3 p: J% }5 W6 H+ o: _2 F! q- c7 t( y2 S
    黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的IO端口进入STM32,经过编号2的施密特触发器的整形送入编号3的输入数据寄存器,在输入数据寄存器的另一端编号4,CPU可以随时读出IO端口的电平状态。: C; a. F/ \9 h) v, p: U
    3 P; r. P0 O- ~# ^5 E# i; o% Y
    ②上拉输入
    ' @4 s: D' N" x: d, ~: w" W3 Z& ^& z' h/ c' B
    上图是STM32的GPIO带上拉输入模式的配置。与前面的浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,根据STM32的数据手册,这个上拉电阻阻值介于30K~50K。
    4 B& X' l1 U) v
    3 g: L  F& w) ]8 m: `2 [! n同样,CPU可以随时在输入数据寄存器的另一端,读出IO端口的电平状态。! Z4 C9 A# N' ]1 d! ^& `8 G
    4 B( a. X$ r% S) Y) r" H  P4 d
    ③下拉输入  V* o# b$ @$ q: q$ J( c7 j

    ! K% N6 q0 ]1 t7 c/ Q& ~% Z④模拟输入
    . e/ y9 f# g. L/ S0 [. [  W1 E' Z; ~" P
    施密特触发器是关闭的,信号直接到ADC输入;
    % W% A) h5 e7 ~7 m- p# O5 b4 ?- K, C6 ~! {
    STM32的模拟输入通道的配置则更加简单,信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块。
    : `6 o# }: r( L% y- P& e4 Y/ S+ ~% p
    这里我们看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在输入数据寄存器上读到有效的数据。. P! Q! r& Y1 ?' _0 u- j& S
    , R& ?7 ]- A$ j0 c1 a2 p- M
    ⑤开漏输出模式
    # n7 `% O8 D) t4 u0 _. ~8 S  {- i" |! c9 U0 `
    当CPU在编号1端通过“位设置/清楚寄存器”或“输出数据寄存器”写入数据后,该数据位通过编号2的输出控制电路传送到编号4的IO端口。
    : o# _- [, [3 j  a! }" B
    8 U) N! g1 f4 m7 r9 u2 y, R
    5 r; B# q$ f" O- e7 g  e
    & u* S. w( P" }如果CPU写入的是逻辑1,则编号3的N-MOS管将处于关闭状态,此时IO端口的电平将由外部的上拉电阻决定,如果CPU写入的是逻辑0,则编号3的N-MOS管将处于开启状态,此时IO端口的电平被编号3的N-MOS管拉到了VSS的零电位。
    8 o# @7 v: c: S% }9 S3 ~4 X4 D3 y. A1 {- J
    在上图的上半部,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控IO端口的状态;通过这个特性,还实现了虚拟的IO端口双向通信,只要CPU输出逻辑1,由于编号3的N-MOS管处于关闭状态,IO端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑1。
    3 z8 ^6 `+ T7 L: `( n
    & a5 w; Z' E2 g. MGPIO口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在IO口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高的频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
    ! Z+ q* U. M% W6 n9 n& h# h& {: Q
    8 ?8 p1 ?& K" ]) a⑥开漏输出复用功能
    6 Q/ w, N! L: j" s/ D/ B) U% C
    7 Q" T4 k4 p) \4 Z2 l2 X1 B0 l+ E4 e⑦推挽输出模式
    & |" M+ c9 U- c; s1 l0 L" s, ^1 L3 ^( o3 o4 m4 B9 T( Y; S6 A. O1 B
    ⑧推挽复用输出模式
    ) h. t5 p+ v2 \% t( N& @2 e' _  s( C( l" d! W
    GPIO推挽复用输出模式,编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了,并和片上外设的输出信号连接。我们将GPIO配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定,其它部分与前述模式一致,包括对“输入数据寄存器”的读取。
    6 f. C' E, l- t; [) ?6 u5 l6 P& |( N- ]+ z
    3、应用场合9 V" G( f2 {! V9 j. j% T

    2 E, {9 p$ @1 H2 e5 _9 @! O①上拉输入、下拉输入可以用来检测外部信号;例如,按键等;
    0 D5 m# \- h! e- s3 V! c* e( w3 ^4 i1 p: Q; u: v" ?( T
    ②浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的I2C、USART的接收端;
    . E4 y! W% t) u( {# Q# j* @
    - u  L: ^" L7 r8 V9 u/ Z" F③普通推挽输出模式一般应用在输出电平为0和3.3V的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部一个上拉电阻,电源为5V,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V电平。
    8 b( }  E9 N! G( T
    - ^  \6 |+ P% K* T5 n$ G/ K) d/ Q④对于相应的复用模式,则是根据GPIO的复用功能来选择,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。0 {9 z% ^9 ^2 q/ H; m

    " `3 c  B' T8 q- N; u3 j⑤在使用任何一种开漏模式时,都需要接上拉电阻。* T. K6 v7 c( ^: M4 x, n+ d

    * Q3 B3 E* Y5 G, j8 I# `2 w, r, x+ m. D+ ^
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-9-24 05:18 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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