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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
15.1 初学者重要提示/ O# D; \0 {) `* p2 c* L
  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。
1 w" U2 f/ `3 T6 n6 @  对于不使用的引脚,推荐设置为模拟模式,悬空即可。2 a1 p3 I0 t; u/ R9 Q8 B# o
  GPIO的速度等级高的时候,最好使能IO补偿单元。
" F  V0 q7 K. v; B; |+ G' Y4 N, p
15.2 GPIO功能简介: E# m+ Q% X: I1 O: H& T/ q) X
STM32H7的GPIO特性如下:
7 p: v+ n5 p8 ]# \+ t  F, x7 s  输出状态:开漏/推挽 + 上拉/下拉电阻。  R$ h/ T: b" f/ u
  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。$ V  C7 C" {/ g2 s) @
  GPIO速度等级设置。
; y# u5 P; \5 R( [6 g  `  输入状态:浮空,上拉/下拉,模拟。( X9 m3 X  @. E/ B4 e
  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。
, S, e. M' m# e& v  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。
2 R5 Z- e9 Q$ L, Z2 d% Z  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。$ A8 a' C) K& W1 d1 o
  每两个时钟周期就可以翻转一次IO。
7 Z; n! w& i: m/ y0 F  W2 H  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。+ ~( P$ A* ?. i. ]/ C
15.3 GPIO功能模式分析(重要)

3 w: G& E+ K0 b4 F0 P* K8 VSTM32H7的GPIO端口可以配置为如下的8种模式:" q$ }, A7 c/ w* i: \
  输入浮空7 t6 m/ j' f9 |* ]9 i- y% N1 [( i
  输入上拉
& c0 `# V( l8 t+ O/ S1 _+ m  输入下拉
& B, m$ w/ ~& j$ K' p$ v  模拟功能
2 t  c( ]. H: D: m  p% n' r% O: p  [  具有上拉或下拉功能的开漏输出
- Z( {3 O: E8 V' n9 o0 i& N& }. L  具有上拉或下拉功能的推挽输出
. O/ `/ [1 S- E& u% V4 A  具有上拉或下拉功能的复用功能推挽" A% [& N! i' G- n
  具有上拉或下拉功能的复用功能开漏
6 v5 h2 S2 c; D/ ?; z
, f6 E4 Z8 @7 j# Z由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:
0 }1 N/ ~1 y  h8 m- e* S8 z  GPIO_MODE_INPUT 输入模式
6 z9 ~/ \0 J7 G; ^. Z* Z1 x  GPIO_MODE_OUTPUT_PP 推挽输出, e( u1 C( X' w% r" L( m
  GPIO_MODE_OUTPUT_OD 开漏输出. L& \; c. Y5 A/ J
  GPIO_MODE_AF_PP   复用推挽% ~$ C3 ?4 C% Z( d/ x7 q# e
  GPIO_MODE_AF_OD  复用开漏, j7 t4 E. `7 H4 G8 v
  GPIO_MODE_ANALOG 模拟模式
6 t4 i- U4 h, f6 J; @3 t9 |3 i; @/ M6 d: m# X4 n, G
15.3.1 推挽输出
, k, y$ Q( k& O8 f3 n" R0 J
" w$ R4 f3 P6 \4 K
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

: @5 J5 R- x1 z
; \# V6 e* }' S推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。 5 U1 v; P# U# s. Z/ T  Q; l
4 |8 @( @, V3 F2 p% _/ u
15.3.2 开漏输出7 H* h5 `5 ~, {' g

( d3 K% ?% ~, s/ i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

+ H# V8 w7 ?" n$ O3 I
7 y/ g$ r6 T0 Y# \  i5 v开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:* |' H% ~6 o, P0 F
/ D: X" D' Q7 e. B2 g: E  _3 u7 ]/ W
输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
: s  i8 J; g8 \! c# c/ [开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。
( {) T9 X; r( ^' s开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
* u5 m$ h; i) @+ u可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。
8 f3 ?5 G+ D2 V3 n& ?$ _4 f
6 n3 h1 q( ^" L  N( H. ?) `15.3.3 复用推挽和开漏$ ^: [* j6 X$ f* b8 I" a. }
复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。
$ c9 i& f7 S2 X& b3 l% n/ X" `+ L
! C5 Y7 V8 A/ A+ l15.3.4 四种输入模式

2 K2 u3 e/ L# t$ k5 u7 i" J* Z( w* l& g
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

" G3 ?) C# {5 B! r: _; q. N
! }8 H$ R6 `. h# v/ V通过上面的引脚结构图可以得到如下三种方式
5 G- D2 @# w6 h$ r5 t! {& C6 \2 q3 n- |, X3 Y! K8 o$ ?; }
  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。
1 ~4 o& d; t6 [" _+ E  J1 ~4 w  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。: z1 C$ d6 J5 k
  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。2 \% Z0 h! ]# r; p
& t8 U3 c' E# S. {

& z5 n0 i' Z  ~7 R* J  B而模拟输入模式是GPIO引脚连接内部ADC。3 Z  C4 ^/ [+ K: d2 L
" L/ @. k: i+ _& a5 l
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
* L- v3 j3 Q! i, c- t8 ?

# m# r) x9 X8 b4 r/ m1 s' ^15.4 GPIO的拉电流负载和灌电流负载能力
) U& F: i) D) y% U这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。  z3 G, v: l% G; M5 S0 x
1 ^* T, q4 U$ C2 C8 {1 B4 f& ?0 v
  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。  i% {: c! T+ ~! w- N: ?! R
& R5 `7 h, P6 i- l/ H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

& Q: Z, x3 _1 B* k  O2 c$ Y
: {5 @# I% M; F5 F( p+ N+ P  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路
5 i) s/ ^0 w' Y$ f$ B; m$ Z# p+ t
7 `: m1 f& r5 ~# ?
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

; F. E3 q8 K( a* p! ~7 _/ W! p, K( R1 K+ c3 h* K' u9 n
有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):
0 Z" b7 a$ T' q7 q2 J" O6 V% Q' H* I! ^& a1 v& V2 Q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
* G, U8 c: p* }
5 W& ?, p+ e/ B" E8 }% q
通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。& Q3 T/ c) y* V$ G$ W# Y; ^! P6 V
$ l" K' z2 l: U7 t
15.5 IO补偿单元,用于高速( Q& K! A6 x- O) I
IO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:
: z5 Y5 p2 G+ S  t
2 f4 N, M+ u2 C/ Z& j/ N; v6 W7 J
  1. /** @defgroup GPIO_speed_define  GPIO speed define4 \" S" i2 B4 g  h! }0 S- y, c
  2.   * @brief GPIO Output Maximum frequency
    4 P6 l4 {; T. V) x" J  z0 j
  3.   * @{
    $ |' C' L: l( H1 ]4 a+ \
  4.   */  
    & q+ c) }! Z) Y; d7 `( ]" i% r* Q
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */: P! S6 @* t! X( |
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */
    1 U9 y! F# e" u- U! S% f% V
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */$ O/ K2 y( {% w* m7 H
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码
' w% I& y- a. H: N% T# t
使用后两种速度等级的话,最好使能IO补偿单元。+ G! D" U2 h' t/ V+ p
+ o9 [4 ?7 y( F0 B1 {) h* _
15.6 GPIO兼容CMOS和TTL电平2 {( Q+ [5 G- N. K
CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结5 n: `( U6 P, s" P2 q

7 b- y# Y# W4 m: u$ b
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

* D% g! H8 @" @  @1 z& S+ A: R0 \. n
- S& r7 Q/ O' C15.7 不使用的引脚推荐设置为模拟模式
& u" G" @4 t/ [% I7 O1 |" `主要从功耗和防干扰考虑。
9 V) e7 j  I7 a/ R, d# O  C8 Z# _2 x0 G8 |+ J9 S2 G
  所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。
6 O% [' s# [/ V( a; y/ ^2 ^  Q  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。
" K2 ?+ t7 E: ~5 P  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。
5 ?7 }2 K  C# d  S  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。
$ s3 ?0 _/ A0 ~' }# m+ }5 {
# ^5 ^" o% q! J) v+ k6 ?
% o3 n8 I' I' ?6 s$ ~综上考虑,不使用的引脚设置为模拟模式,悬空即可。
" }3 s5 K6 ]. P! i
+ T$ D4 b  D) U. K5 K8 h# |15.8 总结
% H; I+ W" `! j8 m/ F本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。# ~5 i# d7 y* n4 e! ^3 t

4 N. a" s% b6 u/ O: P* M8 ~+ A1 q' l3 ~9 X' l

7 v8 b" k8 I6 s! O# \' A
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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