请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
15.1 初学者重要提示
8 `! r4 v  j: ^# t/ S1 w6 A  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。3 H% U& ]/ @3 D0 f: N
  对于不使用的引脚,推荐设置为模拟模式,悬空即可。; k* S6 B% {4 `& |8 e$ D6 u4 s$ R0 M
  GPIO的速度等级高的时候,最好使能IO补偿单元。
6 U* I- K: `8 s" h) r1 h
" Q9 {3 k( W4 T15.2 GPIO功能简介
8 Y' e0 ~" n; \1 I. {STM32H7的GPIO特性如下:
  B" M  H) i( q, Y: F  输出状态:开漏/推挽 + 上拉/下拉电阻。1 z0 j  f/ y2 E, o9 h9 ^
  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。
( J3 [" U' ^6 O; n/ Y+ H  GPIO速度等级设置。# U2 R& b( h6 d3 K
  输入状态:浮空,上拉/下拉,模拟。+ m" i- C( k* A
  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。
+ f' F8 B. V( M, l  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。
1 i4 V; ]# p- c( F7 A  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。% f# J# V) F* x8 D" T# u! l0 M
  每两个时钟周期就可以翻转一次IO。
% J' h, ~- V: d0 S' o6 T- X1 @  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。" z; U- `9 T, g2 ^8 _
15.3 GPIO功能模式分析(重要)
7 K8 K( ^3 I" o  {5 W
STM32H7的GPIO端口可以配置为如下的8种模式:% M5 }5 X7 h2 D+ {7 G% J
  输入浮空
1 T& h1 A* F: G2 A& ?0 B9 X6 k  输入上拉
1 b! U! h* S3 f  输入下拉
6 o6 {1 q3 V8 T  模拟功能
: x; s( Y9 ]- s+ W  {, F7 A2 c  具有上拉或下拉功能的开漏输出
  t/ j3 b- I, T6 W& Q+ z  具有上拉或下拉功能的推挽输出' G3 ^+ M3 E7 R" q
  具有上拉或下拉功能的复用功能推挽& v4 r0 ^/ Z+ M  R, s
  具有上拉或下拉功能的复用功能开漏1 N- [6 s- R4 V  I" y
* T' x2 d/ Y$ q3 m- Q& O* V4 F, X
由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:
, C  U5 w3 b4 }3 ]* n7 m% f/ l  GPIO_MODE_INPUT 输入模式
* r$ [" {8 {9 A8 L+ l  GPIO_MODE_OUTPUT_PP 推挽输出8 R3 _9 l( @/ i* y1 A
  GPIO_MODE_OUTPUT_OD 开漏输出
6 x, G4 ]6 R% b. N0 q( B  GPIO_MODE_AF_PP   复用推挽" W2 E9 }7 C5 Y; T
  GPIO_MODE_AF_OD  复用开漏
& I2 ^* [8 p# `  GPIO_MODE_ANALOG 模拟模式
+ `3 E7 i+ t& D5 F: ~
3 r% V  \; m" W  D15.3.1 推挽输出
. |2 s( P" V7 f7 R2 ]4 \6 R4 H6 e0 J) G% @- y! j: W# f+ s9 P
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
" I" r, m7 g- K; Z. \/ ]- I& Z4 m

0 q$ ~5 e. G# H0 Y推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。
! O, J+ s% p9 q# u# E. Q+ s( {, }
15.3.2 开漏输出9 `/ o8 s: u/ D! u0 U

7 f/ Q: O/ g7 U) }; {0 `! }+ q8 w6 Z3 I
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
& ~& y3 r  c8 @& i2 A
6 K0 d, y7 ~, c  @( V$ ?
开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:+ ]  Z. Q1 P- m- Z# h7 l

& h% v6 M# B- y$ Y: D输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
) }+ y5 ^8 r6 s+ e开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。$ C4 h7 E; ?" C; d7 ]
开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
$ y% }; [5 A; C& ?, N可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。
3 a5 R+ Q8 C0 Q/ I8 v; Z% w, a0 ~$ T2 S: |4 @
15.3.3 复用推挽和开漏
6 v3 T1 ~0 ^0 Q- ?* w& \6 i" s复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。- q! t/ R( c! Z0 t

2 X0 y6 R% Y% Y1 d" U' u/ U3 l! z15.3.4 四种输入模式
* @, [7 X$ N5 u" i3 B) V6 N

# \3 S( z1 o' `% g
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

1 B: x# ]0 H1 L3 M
: D# i% w3 a$ g通过上面的引脚结构图可以得到如下三种方式
: T2 }' b) P; T% r$ y
, ?; R2 f4 E2 _) t7 w% s# \  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。2 U+ F3 q& P3 a# W- ~
  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。7 t7 b8 Z6 \0 P! r) ]) o7 r2 d
  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。
2 [3 N+ O$ B; P. T# n" ~2 |5 `; N9 ~+ O7 ]" t

' \. m, j) C1 Q! u$ Z' g. W* B# L, I而模拟输入模式是GPIO引脚连接内部ADC。. B( w& l: Y# x# n: E, _2 H

1 [" [5 p' D+ Q. p/ N- L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

1 c9 |2 `  M- ?; p& M# F7 s4 U* J& W5 r
15.4 GPIO的拉电流负载和灌电流负载能力
; I; C# P6 @# p1 B) X* D( t9 p这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。% V$ U5 G& ^. b
* A  V3 R" p, K' @& z' Y2 r" @
  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。, N7 d2 G& W+ B9 @: q
' `! G0 J0 n1 M# ?' t+ W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

0 W( G3 I" q6 w: ]$ `
8 t4 j3 r* Q! r5 v" h' K  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路
$ D) K1 r6 O/ h9 a
/ t0 ~! f. C. z$ K& @  o
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
8 @  {( s& P9 m4 t( X1 E" a3 s

; w: C, B$ z0 A; d! i4 o有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):
, C8 D2 I* b$ L7 D5 i; {' ~% |/ g6 E2 ~! }! u- t! X8 K/ q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
+ k) @, c4 P' Y9 f6 @
5 e7 `5 C3 Q) t- r
通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。
' M  m6 s* @1 a9 K9 M' G1 V; y$ l( d' \
15.5 IO补偿单元,用于高速! R- s) J4 u5 Q! ]! Q8 j
IO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:
2 e5 \6 O1 n' M4 I, n1 k2 ^
# T6 _' U: X/ W) u) {
  1. /** @defgroup GPIO_speed_define  GPIO speed define
    $ k; o( `& K" Y' F! f* w0 T
  2.   * @brief GPIO Output Maximum frequency. L: g. ]/ r* \; r
  3.   * @{! t5 |/ k- t& L- H
  4.   */  
    + _& X! K  b/ i  w/ A
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */
    . W7 t/ C' g# o$ m
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */7 _1 w5 V* S% L  Y9 T" s" g/ W) s
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */$ |9 ~5 U, i7 E$ f8 o
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码
+ W9 r- J- }5 ~) X0 j
使用后两种速度等级的话,最好使能IO补偿单元。
( n; j( i& e$ t" [1 O. r* {
3 p1 X/ i5 Q) M0 u$ J" v4 Z15.6 GPIO兼容CMOS和TTL电平2 H$ F2 E& N; U* b: q/ v
CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结
3 H& X% Y" C! n* q! Z) ]8 F
$ [7 j' l7 v/ O+ k  ?& c
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

' f2 t( t5 |7 u5 a+ b$ W4 i
, C$ s, S0 b! [, ^/ C" I' f15.7 不使用的引脚推荐设置为模拟模式# A; J6 u* l! U* l5 E9 q) c
主要从功耗和防干扰考虑。  j& a( I9 I8 i6 Y6 R2 S
; a* J0 U* X, o0 g  N) o0 f
  所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。/ H8 }( O, {2 t  x
  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。- ~! F  C! r  t" S. q8 x, }8 I" J
  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。+ R! Y7 F- r9 q8 I; |: V; ^
  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。- }" S, ^/ A  B/ r- D- h6 C6 f
6 X& a0 G* e" q6 Z/ [  P  E2 B
' o5 s  L. ?% f! \& n
综上考虑,不使用的引脚设置为模拟模式,悬空即可。
* K2 ~- q# |- R( c+ }
; U5 r  y) j2 c$ d& l+ V9 o9 _$ o15.8 总结
! U8 F: R& k6 o" N0 A6 F0 J7 B本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。
7 v& V0 W% |8 K8 z( J( m8 |0 S/ G9 h# n2 ]0 `
/ @- b" L* f. @: O  v
! q+ G6 Y( ]( N2 S1 S& X
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版