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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
15.1 初学者重要提示
. o- O& B$ ~) R# O  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。
3 @5 N- P' n. X/ p' ~$ _% q1 v  对于不使用的引脚,推荐设置为模拟模式,悬空即可。7 \  x, L7 [' N) p. W! S
  GPIO的速度等级高的时候,最好使能IO补偿单元。
* T& M1 @" @/ s2 a# v& B8 m7 K' B' Q" @" g& e
15.2 GPIO功能简介
  Q: e6 u* D' M. ?7 k& XSTM32H7的GPIO特性如下:
. R  `3 C" j' A% F5 M  输出状态:开漏/推挽 + 上拉/下拉电阻。
3 C1 {8 u/ y/ H/ _2 ]. o7 Y0 }  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。, Y9 Z* H9 _$ g/ e0 N0 i; X
  GPIO速度等级设置。0 J2 d. [- A  w% s8 [. y
  输入状态:浮空,上拉/下拉,模拟。
. X; E- H, E7 |5 t  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。
- k9 j( z0 g0 F; e  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。
% ?9 |7 f$ Y  }/ f* V  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。
3 q% D( y6 _) t0 h  每两个时钟周期就可以翻转一次IO。
; b* C9 n/ j& @. V5 f$ |+ H  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。
" X; \% h( h: o( _' t3 B+ G$ v15.3 GPIO功能模式分析(重要)
5 J* _( x! p3 Y) [( F6 J
STM32H7的GPIO端口可以配置为如下的8种模式:" s6 L/ |+ {' \2 T8 l; T& |
  输入浮空
, F$ J/ T! v: n; g  P& _  输入上拉
0 }& g! i+ P8 Y0 {0 F  输入下拉
, O$ W: n; ?0 ~) e. J  模拟功能' Y; C3 S8 q) N$ O4 m+ w& M
  具有上拉或下拉功能的开漏输出/ B9 b. {# M5 A/ s+ v. f8 V0 I
  具有上拉或下拉功能的推挽输出0 {7 n' W+ h! {8 h6 k
  具有上拉或下拉功能的复用功能推挽7 E/ J6 I, X! y4 `8 {* M! A
  具有上拉或下拉功能的复用功能开漏
2 u- s6 Q; g0 |7 n' o6 p
+ W$ M- l' I: F$ w- C由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:
2 x7 V7 ^5 i4 F5 c) K3 W  GPIO_MODE_INPUT 输入模式
' o" r) q" t! H4 |  GPIO_MODE_OUTPUT_PP 推挽输出: v7 q, K: A1 t) d2 Z" R( W* l
  GPIO_MODE_OUTPUT_OD 开漏输出5 [2 [, ~: `+ c- w! B; n
  GPIO_MODE_AF_PP   复用推挽
: r& w, e) ?" H" Y2 S  GPIO_MODE_AF_OD  复用开漏! |( K# q, v% ^
  GPIO_MODE_ANALOG 模拟模式
, G9 u5 U1 q& D9 U( U8 @1 U+ H* w1 ~& E- ?' B: E% x9 n
15.3.1 推挽输出' q7 @8 X# y+ B0 Q. C

# B! V4 D& e  N4 o4 B! w& [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
* {8 F5 u% c' Q* L( y0 Z9 k

5 o: B. d1 G- {5 T& f! K推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。 6 h. i( D1 @- q' v9 {, A' u

& g2 J4 s( b& H* V6 H15.3.2 开漏输出5 V2 v4 ]% x9 k! s  H5 J$ s

' U% H" S- M& E9 K; M$ u, V
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
' c( ^+ P$ h: a7 k  I

3 b; s3 t$ X' Z% s开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:. @+ S& `( p5 d2 h2 U) W6 W2 t
& x9 t! s0 M/ a
输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
& K. S( n* Z% D开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。
1 M7 Y! ]) q5 i4 q2 o5 y/ |开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
" |$ }% @+ |; f可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。
' k+ V2 y0 y, L; K- f% |2 n8 a# H2 Z5 p2 {% e
15.3.3 复用推挽和开漏
/ D1 t& [4 O: q3 b! a6 g$ E复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。
8 }) O$ c9 e( T' g7 S+ p6 T3 U' ?/ w7 E+ S$ a2 H! P
15.3.4 四种输入模式
/ f# h) i3 P2 s
( y( x4 `3 b+ I1 A$ u
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
  c1 y4 \( C) {9 a& N4 Z

" W$ @/ A4 }9 a* g6 l+ W通过上面的引脚结构图可以得到如下三种方式" m3 I* y/ H2 Z8 W
2 i" w( g2 g: y9 X. _5 Z/ u
  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。' M& i) g/ C( O3 N9 ~
  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。) Y5 V2 Y1 i4 A2 }+ N8 s
  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。6 |/ h( ~1 _$ F0 p( D
6 A1 Z# }+ d7 B: A8 w% ]
/ I, d8 x# _! }: @0 f* q
而模拟输入模式是GPIO引脚连接内部ADC。# d  \5 s, Y% g. n2 Q3 L2 ^
% ~) n. j8 M: w5 n( {6 A: W; ?" N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
9 ]; d$ u. G% {5 d# T. a

! E4 ?6 [6 j1 j' u$ Y! J15.4 GPIO的拉电流负载和灌电流负载能力6 Z6 j4 j  X" d% a
这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。
0 I5 @8 Y8 j* ]' X" \/ M# z! m. k
( M! p! @. H3 [. _3 t+ F4 q1 V  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。
, l0 u8 e, Y! f4 K$ q# j( O$ J$ o  v% u! @
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
$ r2 t: N4 H. g" h& {

& G6 q4 h9 h/ @' z6 D7 v+ `  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路
) ^! |: ^' P- c: G. ]9 T6 k8 ]. F6 e* G$ ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

3 C: m1 j8 c: F. u
. p6 [/ a. x/ R* k3 s) G! r有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):
. m% b' E- F8 L( X" \1 ^$ A' X# [% h; @) J8 `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

$ u6 V, i' D, K  y7 f7 d; ]+ o# n! ~, ~7 r: C6 l: S
通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。
1 `$ y+ c( a( T0 ~3 r2 k( ^, e" J; O7 t; i4 J  O
15.5 IO补偿单元,用于高速
- U! m  n9 u. s3 a' ^' H& hIO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:! o# I2 m( k# C3 r7 B
5 M' i+ g2 _$ L
  1. /** @defgroup GPIO_speed_define  GPIO speed define9 v" w1 G% U' r. V3 I# M2 L
  2.   * @brief GPIO Output Maximum frequency* B) h2 j  Q4 i" Y
  3.   * @{
    . j- C9 B( e' Q  X
  4.   */  
    " |$ v, @+ G9 j% s/ f
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */
    / j( r- G; |0 K) P. \: q
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */2 n4 s! m/ v1 e; F6 ]
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */
    # t5 W- v# \( s4 Y# j0 G
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码

  H0 R0 U! q, T1 v  K使用后两种速度等级的话,最好使能IO补偿单元。
6 s  V$ {% W& }5 x0 M6 d- x* o. q. \. Q+ S, R* r/ b
15.6 GPIO兼容CMOS和TTL电平& Z: v: ~6 \$ C  ~0 ?
CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结, s, v8 N7 M$ _
1 D6 J: w# D( P5 {; f
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

# ~" V- z5 H: ]3 s6 K# M1 B% j+ j5 o  I" E2 `3 W4 i
15.7 不使用的引脚推荐设置为模拟模式
, v9 S7 D% m4 J) u, l, y主要从功耗和防干扰考虑。& f) K- R1 J5 S+ t* p' a$ P
5 Q% e9 w! C3 U6 D6 x
  所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。( {+ w) B+ W9 s
  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。
& p) U5 f6 q4 Z! Q! \9 Z0 n  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。- X6 }$ Z! F6 r8 Y
  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。' D/ g, c, D# w  r( u
( h) a& P6 w6 Z  g; Z* U
5 A8 F# ^5 A4 p% @
综上考虑,不使用的引脚设置为模拟模式,悬空即可。
; R5 k9 ^) y1 }( v/ g; y: c: {
0 k& L7 |2 |0 |( n8 [4 Z15.8 总结- I/ F$ e6 {# u( l3 j
本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。
6 }: \4 O" h2 h0 y8 w7 p. ~  |' g, m8 G9 f+ K. }# G3 U% l0 w
/ m& Y) q; F. R$ v$ f2 U8 O% f

6 x* L2 u7 K8 ^9 v! j; @
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版