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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
15.1 初学者重要提示- j  n; H1 G' N6 x* v. T& e9 R
  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。) i( S9 ]/ b5 i, V7 s$ @& `* |
  对于不使用的引脚,推荐设置为模拟模式,悬空即可。& c& X( o9 U& i  ]% z, x
  GPIO的速度等级高的时候,最好使能IO补偿单元。
: j0 e$ c7 U3 F. t; Q- W; a/ w& M5 {# s
15.2 GPIO功能简介
2 e" l* L- A0 |1 D/ l7 lSTM32H7的GPIO特性如下:. ]. b! n( [' s0 J6 E( o* x
  输出状态:开漏/推挽 + 上拉/下拉电阻。& F5 ^! u6 O- ~: a, y: d; T2 s! l
  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。
5 I) t$ B" e, O' D# O& W" r9 d  m  GPIO速度等级设置。
$ y3 k0 R; w- f1 n  输入状态:浮空,上拉/下拉,模拟。
2 v2 g& V$ `4 T( @* A  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。3 X2 A( n2 ~4 }+ u8 y
  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。
2 X$ P$ g4 X. W3 W6 C  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。2 m$ m, Z: Z( `3 D
  每两个时钟周期就可以翻转一次IO。
& G) p2 Q$ @/ v& H# G  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。$ f9 x  X) j4 A; X
15.3 GPIO功能模式分析(重要)

. D2 E4 {7 g# [( tSTM32H7的GPIO端口可以配置为如下的8种模式:" Y6 v. O$ G$ [/ ^. C/ Z
  输入浮空
& z3 W: y# _' m, c  输入上拉
6 }8 b9 i5 d0 [! r4 o3 D  输入下拉
4 O5 l) f* ~1 @( v+ {/ n, y& r  模拟功能
4 i. R# R8 B6 ^6 [  具有上拉或下拉功能的开漏输出
7 X& @: v0 \- s% N' j3 x" h  具有上拉或下拉功能的推挽输出
6 F6 Y$ t4 ]5 e- u1 z1 ~# J4 F  具有上拉或下拉功能的复用功能推挽
  f' G+ v' j+ Z  具有上拉或下拉功能的复用功能开漏
4 i8 Z7 h# p& V' P3 |- M2 }( k6 _4 H2 {! H! j
由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:
  g, o  T6 `1 S0 [  GPIO_MODE_INPUT 输入模式
- {9 a  ~0 `4 U6 W# M+ J% c  GPIO_MODE_OUTPUT_PP 推挽输出
; d* d) {7 y1 W0 g) c/ ]1 j0 f. f  GPIO_MODE_OUTPUT_OD 开漏输出7 S; I0 d& r- S4 {. Q; O
  GPIO_MODE_AF_PP   复用推挽1 ?3 ~) }. p) X3 r# w
  GPIO_MODE_AF_OD  复用开漏) y% d6 g! `- p1 @3 e
  GPIO_MODE_ANALOG 模拟模式
) F' j  X% ?3 r- I4 {6 \4 _
. i* M2 w# R0 f9 J6 X# M15.3.1 推挽输出
& h. R6 E+ M5 }# H6 S/ _+ b
7 {1 g3 u, d# k  N0 v: E
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
0 p7 T2 N8 q+ k& b0 i( v
# q, S# p; L6 M9 _, [/ V
推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。 - b/ E3 ]' |; A; u5 n! }( \+ o

/ A9 H; p' O% o" t$ M15.3.2 开漏输出
: R( A  T( j" k8 f+ z* n
# D) }. o( c3 O" P' H8 `, V4 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
1 X2 |. v+ o! p% E5 u6 k

% Y9 F' C6 d. F* I! r开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:
3 A7 x7 s! H  e9 |) a8 C$ n9 I$ h' w* W0 V  A3 r' [) C
输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
; I- u' F" E$ Z$ _( w0 B+ g" j开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。
& I" p0 ~, m2 Y& l开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。4 b( ~0 l- F, P9 M; A; Q. [
可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。; D& _2 C# w9 a  `5 b
7 K- m+ V1 ]0 L. k% _- m- \" T
15.3.3 复用推挽和开漏: F4 t& j4 f* h; {
复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。
( B1 \% x/ j0 T: Z$ s  r9 |. O9 D$ c1 V
15.3.4 四种输入模式
' a: C# w& S/ l. k4 X$ M8 w, {

8 s% L( e, B% A
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
6 F: L- w3 J7 v2 l
! l3 n* m4 m1 @* P! D
通过上面的引脚结构图可以得到如下三种方式
2 p" ]. I# g6 W" f! w) ^" G
8 S* f/ V4 c; x: A  L# u  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。: o0 A8 B" }& g" G/ k0 V6 {
  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。5 K; z+ A5 k6 M' S$ v
  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。
8 D+ W) ?& ?) H; {& b. a6 j& s: D- V. M0 u) B

  e% b+ r# N4 p7 N- @4 ~而模拟输入模式是GPIO引脚连接内部ADC。
% E' S4 K, ?6 P% f  y( ?; V; X
- X( |1 t9 s' r/ J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
* b4 x$ X" C( c, u: r5 ~

( X0 o) @9 f& R) P' ~4 j15.4 GPIO的拉电流负载和灌电流负载能力1 _% S4 P( P& L) J$ u; X
这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。( ^# C% _% Q0 Y3 ^$ f

% y: W7 h6 L- ]. @" e$ h. S! W2 [  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。
5 f; q0 [8 l1 `& G$ t
# p! h6 a$ B, {. }+ w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

6 L4 V4 J* ^* a# E5 S
  E; d: ^: E1 k  V) m4 N1 E  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路
, k! v. j' A  {. n  i/ g" {( H& c" y+ u9 ?0 \" e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

  T: Y& Z" R' O0 i  i
+ I$ w+ k: k$ ]1 s0 {2 h3 {有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):
5 {) ^0 G. T5 `4 V( N
2 s9 V5 q9 g8 u) b( {# C
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

* X$ T% u! X# \2 A! X6 C8 z$ J4 b! h8 n3 K  `/ j5 u. ]
通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。
9 Y9 s9 U  W9 C- p; F( ]8 I5 l0 l6 V) @9 ~( l
15.5 IO补偿单元,用于高速
- f9 ?" ~5 v2 {" P4 oIO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:
: v* g$ V: M' {0 I) U2 Q& g4 F) S- P# A1 d# _  _
  1. /** @defgroup GPIO_speed_define  GPIO speed define. o& f. M6 u0 ~8 `
  2.   * @brief GPIO Output Maximum frequency
    & l8 {* k; u: M* E" L. F4 Q
  3.   * @{
    0 W& ?5 `0 f$ T( G$ c! ]1 {
  4.   */  4 f% K9 ^# Y" w3 |2 u
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */9 Q" ~0 H9 G! a2 N* `) B: b- ~- C
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */
    ) h8 O4 R+ o( f- j: e( q
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */- C" G. X+ V7 ?2 X* J4 V
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码
4 V: }! P- h* ~8 T) m4 N) s9 c, f$ W" c
使用后两种速度等级的话,最好使能IO补偿单元。! @) a' q6 H4 r
) d: ?1 N( o% f: n- \
15.6 GPIO兼容CMOS和TTL电平% T' I! [; A6 \% K
CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结
6 M5 m4 E7 a# l+ b; c. j8 _) u% \' O, M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

, I3 T; n- d! G2 x* b5 X) a: o4 W, g2 Q! e
15.7 不使用的引脚推荐设置为模拟模式
1 x3 X( O, h2 C1 s# S主要从功耗和防干扰考虑。
: w3 h  x" W* _, g
7 }$ \) |) W4 W. U  ?1 I5 d  所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。) j8 m, F; k, Y
  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。3 k* {; s: g7 |
  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。  Y) b: ?8 e! @& X# l; F% B
  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。  V+ z$ x# e! K5 p, a

& M- x; k. P! w+ c' q4 q
8 \9 H% ^6 u- }% D, z2 Z综上考虑,不使用的引脚设置为模拟模式,悬空即可。3 {/ F1 O% f; b! v) L5 K

  P% T5 p5 e( D" K; }& f- i9 Y- A# l15.8 总结9 V+ u( P4 C7 B2 @' e  P
本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。
) t1 Z6 R2 @4 L; @/ m% G6 X! O3 h0 O4 r- h' s7 c) R& T

# g- W1 Q; V4 g3 P+ o  @) |/ S1 Q8 k% B
收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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