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

【经验分享】STM32H7的GPIO基础知识(重要)

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
15.1 初学者重要提示
2 l3 D7 V: {" a. p4 K/ g  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。2 _. K; A5 v1 Y! I4 e; E8 ^
  对于不使用的引脚,推荐设置为模拟模式,悬空即可。
; L% T2 ]8 z  e& R$ x! v3 Z4 M  GPIO的速度等级高的时候,最好使能IO补偿单元。
/ X. z1 }% v; U- H( \, \
2 J4 Q* D! s0 G; m1 e15.2 GPIO功能简介
8 q/ [+ R* i/ h2 B  a. eSTM32H7的GPIO特性如下:
5 ~, J! d1 S% _5 r  输出状态:开漏/推挽 + 上拉/下拉电阻。) E3 u( x7 ]" W8 f  o, f7 {2 Y7 g
  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。
7 h# C7 X; t/ j' G2 |6 d1 h  GPIO速度等级设置。! f- K, d9 ?' I' p( T
  输入状态:浮空,上拉/下拉,模拟。9 V- b- R; u3 r5 |+ z8 Y: ~" B
  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。' r8 l) Q8 o1 Z/ Z3 w2 Y/ C% b
  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。
( q7 U& w8 h. L4 M  ?  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。
+ {- j0 h; U- P+ s) K4 R) f  每两个时钟周期就可以翻转一次IO。
# ^6 Y$ k- @" w" D/ K  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。
$ j& ]- H- g3 N" z15.3 GPIO功能模式分析(重要)
/ a' ~' u* G6 B9 C8 ]) w
STM32H7的GPIO端口可以配置为如下的8种模式:& ^- Z: o" b* [4 _+ m9 D' ~
  输入浮空; f/ L3 }, \) Q/ B+ Z: `
  输入上拉
  `  p* l4 e9 F+ l9 f* u. }3 G  输入下拉
/ j$ ~' |! Y" e+ i6 [6 c2 \2 O  模拟功能
; Z+ v6 J, a! \/ m  具有上拉或下拉功能的开漏输出
. v. j5 k7 }/ l# Y9 t: s  具有上拉或下拉功能的推挽输出: r7 J- d* S/ v9 r8 Y5 o. {% q) Z& N
  具有上拉或下拉功能的复用功能推挽
' t' |  H) \1 r& J( x' S, J, i  具有上拉或下拉功能的复用功能开漏
' f. w& Y' w8 {" W, s) w
3 u2 Y) K' x- }  [由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:
% p2 q. y* g6 h4 |1 W" f  GPIO_MODE_INPUT 输入模式6 R2 M* m. G+ C1 ~1 K
  GPIO_MODE_OUTPUT_PP 推挽输出( m' {5 ^0 C  g. W
  GPIO_MODE_OUTPUT_OD 开漏输出
  e. z) o! a6 G0 Z1 C4 e0 {; ?  GPIO_MODE_AF_PP   复用推挽
* p$ e5 `) a6 d; y$ g  h  GPIO_MODE_AF_OD  复用开漏# J& x& e$ f- n' y5 U- n0 y
  GPIO_MODE_ANALOG 模拟模式! s) i7 S' v' _1 b' D9 z
9 e3 j3 m$ s( M
15.3.1 推挽输出
5 R+ S$ {% x4 A# X  h# w1 z+ j2 E' Q" U: Q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
$ ?7 V: y5 Z" O# Y. }

4 s! f+ D% m. R. M推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。
, g. e/ B+ J6 T  u* z7 A1 ?  l/ ^
15.3.2 开漏输出1 T! @7 C+ _$ M0 |; a

  z, Y/ k) N5 ~
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

: X8 R! c7 ^( Z0 F) `
  \$ v  E2 s6 A2 N开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:
. l3 Y4 f- @8 V4 g
4 ~% I$ @- ?% T- E8 G输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
9 m2 ~* M6 J4 `8 ~开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。
5 ^4 k) C' h- {9 ]/ g开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。/ Y% x0 [8 e+ {' m- ~5 a
可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。
3 T, f! q" u. M# }$ h3 a  v
6 b2 o2 N& X2 }' W15.3.3 复用推挽和开漏4 f9 y5 }1 o0 ]* J8 k* }+ o6 `
复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。- q9 \; w* u, u2 j; z+ P' R, `
. o# Q- r+ R! Y% e% w1 U, F
15.3.4 四种输入模式

% M  p" h# t/ E
0 l& L+ q8 [6 b* s' D, L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
  M4 G# Q1 f0 R

  _7 g' i- Y' s% \) I通过上面的引脚结构图可以得到如下三种方式. \$ y* l' d# r0 n. p

3 k3 t+ r2 [$ A( e; H. C2 b7 U  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。' Y# {' j; b7 ^, p/ }2 W6 E& ?
  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。
9 s5 }( R" i9 O: e- z: l6 P  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。
/ F: b: s9 m5 V" ]
& @; m: X) w# y* Q5 E# {4 _4 t, x% W  ?
而模拟输入模式是GPIO引脚连接内部ADC。
6 D: m2 N$ K$ a9 P9 m; w- I/ w6 _9 q- i0 f6 H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

4 }% f6 x* ?* d- Y1 m5 H
9 A8 a) [% h" Y/ @5 T15.4 GPIO的拉电流负载和灌电流负载能力2 ~& v- D. V, a' X
这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。
/ s5 @3 |  s$ |+ S; h2 ?3 a  w( @5 L2 G1 w- Q" m; `
  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。
. z9 S4 m# [8 @& g; O* d2 q& @- l4 n# E' D6 W; N" w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
- ^* l& |' B7 A7 t

3 L% g1 O4 J6 j# H4 N  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路  j3 Z! u) @) p& I; y% }8 q, ]

, Z  [: E: g7 @! b) S+ p
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

0 G  @1 ?1 P2 s. K: o0 c. q4 y! O, y2 p6 S3 R- e7 E
有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):
8 i5 ^  U' u, n; T7 C6 [- m% H- G9 X+ M7 Y* B
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

1 a5 d  w  F& E& \) q  O  }% ]% g2 H7 W. r/ k- ?  f1 y# `" H5 M
通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。* Y8 r( l$ T3 Y
+ a3 w$ Y5 @, k. k4 g
15.5 IO补偿单元,用于高速
8 R/ d; w3 ]1 r% Z; L* l1 L/ eIO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:
* E' P" z; U7 \* k
4 ?9 m# D7 w) g8 E( \
  1. /** @defgroup GPIO_speed_define  GPIO speed define
    % P* d" c  K/ i: F2 y
  2.   * @brief GPIO Output Maximum frequency8 _! t5 f& G) \4 C: \
  3.   * @{0 M- w4 s( p+ X
  4.   */  5 W3 q8 q, T/ P
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */2 }3 T) G; X/ W% l
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */1 o- Y  X4 U$ h( g
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */
    7 w: c6 Q9 N( W: y3 k: Q
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码

9 a$ M& j+ Y( U$ ~使用后两种速度等级的话,最好使能IO补偿单元。) m$ p! ^- a" @( ]

* u) ^$ a: n2 ]$ F5 z15.6 GPIO兼容CMOS和TTL电平2 i7 w; L4 }( B* ~% Z5 h! @
CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结1 [5 v- R+ u6 e7 h; H+ ]" A

7 [( F# c. U2 d; b3 T) o2 v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

9 O  q  j  J" r/ F9 J3 _! `
8 S, e1 D2 k. F! ^! K" B. L# P15.7 不使用的引脚推荐设置为模拟模式
8 M% ~& X# F3 I! z! U( W主要从功耗和防干扰考虑。
6 ~' q/ `* w; ?7 X8 B; u6 Z, F7 v7 P$ H2 L. @+ q
  所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。# |1 m2 \% p2 h; m% a, L7 F
  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。6 q7 X8 z1 f: y! {, i  e
  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。
! z( I; C0 d4 X8 y/ u1 b  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。
1 d+ _: W' v+ S0 l" O2 D+ L. T. y2 E/ y3 N, @1 I

) x9 z- m9 l0 R& g综上考虑,不使用的引脚设置为模拟模式,悬空即可。+ {' g7 e8 D  T" [) i1 `6 Y

% v$ {+ o) I7 T4 @, V15.8 总结
* @9 w- S, _7 m  ?- Q/ k本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。  S0 N! p. T9 S, ?, G5 |

& x5 Q( x% P5 U- c' z+ v1 D, ~8 {: c3 M

9 a; Z4 E  r3 a/ b2 ?. g7 ]* L% U! m
赞 收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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