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

基于STM32中GPIO四种模式经验分享

[复制链接]
攻城狮Melo 发布时间:2024-5-29 17:54
本期我们就介绍STM32的GPIO的各种模式。" b& k: ^0 g9 J+ e4 ^2 o- H

' N0 c- h0 t4 O1 A. z! P. E% S/ i
STM32的GPIO大致可以分为四类:输入模式、输出模式、模拟模式以及复用模式。而每个都有细致的区分和小类。( {9 F/ h9 {$ c4 c+ T* A

' {& j# j3 a  L, P' a3 E. D
输入模式) N. R( v: r" j- @. y$ ~. B
首先是输入模式,顾名思义输入模式就是用来向单片机输入信号的,但是这里的信号需是符合STM32的高低电平信号。
. s8 R  T* K6 Y+ a, F6 _
) t1 G) _+ S2 ?2 K4 u! R. z) I9 d: X
STM32单片机的IO口电平兼容CMOS电平和TTL电平。对于逻辑电平0,所代表的电压范围在0.8v以下,而大于2v的话则代表逻辑1。STM32工作电压范围为2V ≤ VDD ≤ 3.6V。对于COMS端口,逻辑0的电压范围为-0.3V ≤ VIL ≤ 1.164V。至于高电平,STM32支持5v和3.3v。具体须看STM32芯片手册以定。3 \6 h4 C; Q# i! O" k+ `
! x/ P/ V9 ]& N! Y4 {+ c
而输入模式根据上拉电阻的不同分为输入上拉、输入下拉、输入浮空,它决定着当没有信号输入的时候,GPIO的电平是高电平还是低电平亦或者是不确定电平。
5 F0 d9 {# q4 C9 E  Z% t- `
$ J" }. M4 x6 d3 |
微信图片_20240529175041.png 7 A4 R5 y" e( N" k

$ v1 ?7 i3 `4 D输出模式
! S: K( K5 {8 j4 e, p9 X6 C: t
顾名思义是单片机对外输出信号,这里的信号也是高低电平,外部器件可以读取输出端口的高低电平以达到控制外部器件的目的。
/ X# k2 r  t2 T* F1 N) E7 Y1 x- H  D/ h
输出模式除了上拉下拉电阻用以避免浮空状态的高低电平之外,还区分了推挽输出和开漏输出。( X( [) z; D. Q6 |" a! i( \
( k& i! i8 L7 |$ I- K- Q& x8 g
微信图片_20240529175029.png 6 r' T. a- n) L# e6 n
8 S. @5 [" Y" @4 T% t1 A7 S
如图即为推挽输出的示意图,电流通过两个MOS管/三极管由控制引脚形成一推一挽,故名推挽。
9 x' b! J3 S' w; b. \8 X' X7 m& T( c# I7 o
推挽输出的好处是其可以有较大的输出电流,如果说后续的负载需要较大的电流的话,推挽输出是一个非常好的选择。
# ~5 b$ b$ C$ B, W, A& ?
) H9 E, O. V$ ~7 [' [5 [" G' }
但是有利有弊,由于其推挽输出的电路结构,导致不能同时有两个推挽输出的IO口相连接。' J$ R+ o+ L  u5 \( D

. U- {* o& X4 i2 K- L8 v
微信图片_20240529175025.png ( U* \8 O  N9 C2 }
* B6 G4 J7 J( v( @% L9 P
否则电流就会通过三极管/MOS管导通,导致GPIO烧毁,因此如果使用GPIO的推挽模式,则必须避免IO的相互连接,也就是线与。( T6 d/ A$ w1 Y9 \& p3 n) E' r% Q6 y
' {; @1 O4 s( g* Y; E
而另一种模式则是:开漏输出3 a% M2 l3 k/ T+ ]& w5 [! o# E

7 C: J) j" }% n, G/ G' s 微信图片_20240529175020.png . C% C& t/ x' @2 {
! [: d& F$ B. d0 o! l# ~; \" S
由于其上拉电阻的存在,因此开漏输出的IO可以实现线与。但是同样的是这个上拉电阻的存在,导致其输出能力会不如推挽输出,因此开漏输出通常用在总线应用上,例如I2C的SCL和SDA线通常会挂载多个设备,因此通常这时候我们通常就会使用开漏输出,尤其是使用模拟I2C通讯的时候千万要小心不要使用成推挽输出了。
+ ^/ S0 e$ K  e5 W$ r/ ]3 S
9 x% ]. n( C: Z: C# j
模拟模式* s; Q8 q, U( p* w7 D) |1 D
模拟模式通常应用在ADC或者DAC中。2 x- |  f" A1 k8 S& @- n
8 Z: K3 i" y+ K
微信图片_20240529175016.png
. o; o9 ^  K! b

- I0 A, h% X" I4 l% t为了减少上拉电阻和下拉电阻对ADC采样或者DAC输出的影响,通常模拟输出会关闭上下拉电阻,保证模拟信号不失真。
* Y/ N+ a& d. p3 s# V- A; ?$ b. F& B
" [: s, p% H$ J 微信图片_20240529175013.png / S" s8 J" q4 p  R

  _7 o/ y# Z9 f' L$ U% t所以如果你的ADC和DAC的准确度有问题的话,可以检查一下是否加了上下拉电阻而不是将IO配置为输入模式。! G9 ~) Z5 `) n+ u2 l& L

2 G) d% d$ w( q( X, f) K% F
复用模式
* @, C- O9 K# J: X( S% k: `+ k
$ }' a# o/ r) E* e& u 微信图片_20240529175006.png + P; j, [! P9 g6 o7 z4 |. b  S- R

6 g; e- h4 G/ l" s% `, {复用模式通常作为外设使用,例如硬件I2C,硬件SPI,串口通信等等,复用下,通常这些IO会有其特定的功能,我们一般不将其作为普通的输入输出IO使用。" q4 g2 x# f/ b& {
7 K- u: c4 _5 \, a; m  @# P; P1 U# D, e
最后还有一些特殊IO,例如时钟输入IO,事件检测IO等等。0 v6 n" f/ t; s1 z2 _6 ?' {

" \/ `. i$ S9 N$ e( J 微信图片_20240529174959.png 8 Y6 G, P+ Q7 j8 E% v& x
" K# k2 Y3 v  _" _$ b7 j! x
9 Q0 T6 R- O6 p- _
转载自:电路小白& B9 f6 e) m7 y
如有侵权请联系删除
! o) |: k# @1 R- ]+ h  [4 O& u7 Q0 _2 ^/ {' E  _! f, j# z+ h

1 r4 X$ M7 C7 o! h- Y
赞 收藏 评论0 发布时间:2024-5-29 17:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

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