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

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

[复制链接]
STMCU小助手 发布时间:2021-10-27 21:14
15.1 初学者重要提示3 p6 ?1 m% e: N" i. q+ q- B
  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。
+ Z- J7 B$ S1 I" r4 J; y5 h+ M2 [- l  对于不使用的引脚,推荐设置为模拟模式,悬空即可。* \$ K! C2 P0 l$ m3 }3 X3 }4 E
  GPIO的速度等级高的时候,最好使能IO补偿单元。
# ?; r- d& i( a% U! N4 c0 y15.2 GPIO功能简介& {8 E6 J! o; {# x) x" o% M
STM32H7的GPIO特性如下:/ j: F4 ^7 \( ?- Z9 ?- Q
输出状态:开漏/推挽 + 上拉/下拉电阻。
" `& {$ u1 P/ L! U2 ~  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。
5 s) q+ l! [/ B% U& c9 _  GPIO速度等级设置。, l# l% F' E5 j0 L) y
  输入状态:浮空,上拉/下拉,模拟。; R/ ~# C" C2 e- J- {4 p
  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。
" H. c+ w% \- K. G3 }  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。! ]+ ~" f$ a, r0 L/ N
  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。
0 v* \+ ~% z" P: O  每两个时钟周期就可以翻转一次IO。
- H8 y! @4 Z0 N- m+ j( q  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。  D, j/ B! @6 x6 I/ Y  @8 A) P
15.3 GPIO功能模式分析(重要)
( T, n8 S6 V- x- c6 WSTM32H7的GPIO端口可以配置为如下的8种模式:$ _& @9 O# d# w$ c
  输入浮空' ^8 A7 G0 _8 \9 d- u
  输入上拉5 y2 S, d1 S" W8 x/ d0 J7 p
  输入下拉
) O, I! P$ A; B& V$ {3 ]) X  模拟功能0 }/ M" |# s! H$ Z
  具有上拉或下拉功能的开漏输出. }  F5 [! t4 V/ ~! Y$ e- }: g8 M0 j
  具有上拉或下拉功能的推挽输出7 R. E" ~6 z' I- x
  具有上拉或下拉功能的复用功能推挽4 b1 F( U7 r' R# `& `2 t2 k! T( I# ~
  具有上拉或下拉功能的复用功能开漏
* R3 p, r9 x' y8 E/ F$ V由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:
9 R. [% \" I4 E8 G3 U GPIO_MODE_INPUT 输入模式
% O4 q4 l- S/ N( N- g  [3 q  GPIO_MODE_OUTPUT_PP 推挽输出
4 T5 p0 K$ ?; T  _3 |: e) w  GPIO_MODE_OUTPUT_OD 开漏输出
0 ]# _! O% E  d; F6 v0 u  GPIO_MODE_AF_PP   复用推挽* L- J2 F  Q" h6 q2 h; T
  GPIO_MODE_AF_OD  复用开漏
. t/ K& \  t- S+ ?! n1 [; x  GPIO_MODE_ANALOG 模拟模式0 [2 q, A/ `0 R% F2 Q: @
15.3.1 推挽输出! O6 H, y& r+ s/ A+ n6 S/ c
) y  m4 A; c* D' v
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
$ m3 p8 M* s9 F* j. }. Y

, d2 @- \, ?5 t9 }6 h推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。
& _. n* B! M4 y/ j3 [% k2 l2 t0 F5 n' e4 l' ]
15.3.2 开漏输出# [- C/ Z5 A* [/ D3 J: ?8 W

* g) E% \( p; `' b9 R% H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
2 |  H' n- Z6 \& x

' e$ \9 ^9 E, J* x4 u开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:
" e* r; t3 t% O: P& S
" B3 e4 `/ z0 Q- k$ v输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。. E: X* G9 A) ?9 i
开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。+ Y+ v2 b6 ]; ^- k/ e4 D; U) u
开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
" i4 M6 O+ O3 e) A# H3 C0 e可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。
) ?1 i! z1 ~) s! D15.3.3 复用推挽和开漏+ C) J( X. E7 u- V! o7 H8 y, n$ o2 U
复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。
$ C* N7 T8 S5 s+ t) I8 x0 m' a. L% }- G2 E4 ^
15.3.4 四种输入模式! a2 `3 x4 N5 P  [

' [6 o! L# K- v/ c4 a1 @. o5 O
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

2 o; k- c, f: o, Z' ^2 d
& T* |# F/ \2 A0 P9 c! A% w通过上面的引脚结构图可以得到如下三种方式; v2 q) `' |( P7 F9 e4 [5 z& [
, u- {/ y9 k% S; b5 }4 s7 ]
  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。
# ~  M2 R- M: k  o/ e1 S! [  e) ]  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。. i% \* D3 q5 {( L6 n
  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。
% i, n' R4 {; [- o8 s+ f6 Z/ k! ]4 u# a9 E/ u; j5 a$ x
% \9 c/ @' Z) z5 o7 b
而模拟输入模式是GPIO引脚连接内部ADC。! f: I& q3 H4 ^) g! J: b! q

  N3 {% d; V& f* ]" \4 {
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
: {- x) D3 s2 h0 Z) L

) y) S' B; D( u9 g- o; {$ H7 W. P15.4 GPIO的拉电流负载和灌电流负载能力
7 O, Y; A# U! z! l/ i+ l这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。
1 C. @& d& w' G8 @  |9 N3 t; x$ i+ T3 l& {0 F
  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。5 ?) z7 a# O8 ^; O
: g# B- h2 q) X3 e: Y5 ~
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

$ R3 [0 |- i8 k0 P+ J: v' w9 L7 B- p
9 X! m1 T+ v2 t; t" o  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路
' v) P# q8 h# t5 h" D8 T- O
' {; i& F% [4 |: o/ k6 n& e8 t
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
1 f. ^0 ]% Q0 \! P/ B, E

1 U" T' }* X! s7 C4 F有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):) l4 {# k$ o: j: a6 e  t

, M( e' z' P* d: v. X/ ?
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
: t- ~5 e! N9 w3 x) I

4 I4 Q9 ?, M) r* v- D* a8 \8 R通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。
$ U) \. Y3 V# u* p" b$ `& P; u8 Y% U) R, i: O; j& o9 w  I+ Z0 Q, n' r+ ]6 D
15.5 IO补偿单元,用于高速# U6 ^0 _! Y" h
IO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:( x+ t0 m+ a' D" v2 q9 C" O
, X2 b8 I; b& n1 C. l  A, d4 b
  1. /** @defgroup GPIO_speed_define  GPIO speed define' J0 k1 L* F! C1 L
  2.   * @brief GPIO Output Maximum frequency' C0 |  X: P+ b
  3.   * @{
    ' T* ^4 |5 H- \, f) n
  4.   */  
    . W8 u5 b, E3 q' r7 ~
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */
    & o3 u# Y5 V/ i% V
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */
    ' y7 L0 T+ {3 J, I# v& W
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */  v$ e2 r* D8 u9 b0 A
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码

/ c% ]( [) a9 K1 j* u) P+ L使用后两种速度等级的话,最好使能IO补偿单元。另外不同速度等级下,IO补偿使能与否对IO最大速度的影响8 A+ B3 O: {3 k

4 ]: w' k3 M% q% @15.6 GPIO兼容CMOS和TTL电平9 P+ O$ G6 W+ ]: U. i2 e/ e- a9 q
CMOS和TTL电平兼容问题也是一个比较重要的知识点
' h; r+ @8 J, a- B  ?0 B: D" Z, P8 q& s$ `4 N; B# e  j6 i
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
; @; f3 g0 f& r6 ]/ R9 ^3 W

* A* p. S5 t6 ^0 p9 g15.7 不使用的引脚推荐设置为模拟模式
6 D7 d  R  ^( c: J4 |1 |主要从功耗和防干扰考虑。
9 s8 b4 w1 B3 k9 Y+ z) {1 D所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。4 i( U5 I# z4 ]
  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。1 y3 @- H6 i7 f- @; a; A) W+ f) b
  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。
  l2 m# o) y; l, |, X5 f- O8 R5 Z  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。4 W% p& I. s6 D6 s' o
综上考虑,不使用的引脚设置为模拟模式,悬空即可。0 O( ?: E/ o) r9 I* m- i# ~+ i' _

5 J- o1 \# L: E# r/ e15.8 总结
) s: M1 }# I3 x3 R本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。& r& f5 n& B- F* @" l+ F  y; S

4 _' a1 z/ _8 K- {2 d  C( Y! n
/ j- [6 O- |2 h: @. G" t
赞 收藏 评论0 发布时间:2021-10-27 21:14

举报

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