TA的每日心情 | 开心 2023-5-15 15:14 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
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+ ^
|
|