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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 15:00
15.1 初学者重要提示$ F/ x) n1 \% X9 l% O5 M& ?6 ?. I- Q
  学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。
7 u/ M) f: H4 Q# y& i0 ^1 K  对于不使用的引脚,推荐设置为模拟模式,悬空即可。% [2 r, O6 {7 [9 L
  GPIO的速度等级高的时候,最好使能IO补偿单元。
( e; [: Z6 Z) Y) k: {1 x9 f# N) ]9 r# d
15.2 GPIO功能简介
0 U8 O$ i: r/ p2 ^- fSTM32H7的GPIO特性如下:
8 r# e( [% {; X  输出状态:开漏/推挽 + 上拉/下拉电阻。
- U/ ]2 g$ i6 o1 k0 l5 n5 V4 w7 Z  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。( n' h: Z* G, T+ j5 R0 Z& w8 N
  GPIO速度等级设置。- E- j! E0 r* I( Z
  输入状态:浮空,上拉/下拉,模拟。4 H' ?+ r' k% L% Q2 R& ]
  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。+ C. |2 F. Y# S1 v3 x3 d
  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。. E* s% S# j5 ?9 o' V- |
  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。
+ E% P7 |! d% F5 k# [  每两个时钟周期就可以翻转一次IO。$ f! e0 K  q7 q0 P1 a8 I
  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。  ?& z& c2 B/ A8 q9 `) }+ J
15.3 GPIO功能模式分析(重要)
$ C7 ^+ @9 O% Z4 Y
STM32H7的GPIO端口可以配置为如下的8种模式:
3 P1 O. E# d/ ^* W' b2 p  输入浮空* {9 h( |% R8 W4 U' H$ Q8 @
  输入上拉- j6 v3 G1 Y9 Q; J
  输入下拉
" }- x- h9 x: H: D; w$ O  模拟功能
% ]3 o. G' b, @9 P  具有上拉或下拉功能的开漏输出
' z* {2 G2 b5 n0 a$ n  具有上拉或下拉功能的推挽输出5 g: ^+ a+ l! {; l
  具有上拉或下拉功能的复用功能推挽. j6 j8 C/ W5 B. t. V  F( |$ q
  具有上拉或下拉功能的复用功能开漏5 ^, T! V" L2 d9 j5 O
( V. n! F% Y3 k2 Y( t7 Z
由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:8 Z+ T' ]$ j$ Z+ T
  GPIO_MODE_INPUT 输入模式
7 M; U: {7 X9 I' z6 d9 j8 {: S  GPIO_MODE_OUTPUT_PP 推挽输出% D( b  b& ?4 r
  GPIO_MODE_OUTPUT_OD 开漏输出
8 G1 M0 f' I# g1 L& i) f' V  GPIO_MODE_AF_PP   复用推挽
$ v5 H6 j( {6 ^  GPIO_MODE_AF_OD  复用开漏) `; L3 l3 C: T' _! T* S8 ?
  GPIO_MODE_ANALOG 模拟模式
+ ^6 M+ ~! |3 R: @" w5 c: g
3 i7 K* e) `. n' n( Y, t. g15.3.1 推挽输出
) o/ Q( w/ v# u4 [& U0 ?( e* e3 X# r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
1 N0 A" w* N2 n6 i. z7 z1 _

8 k/ l9 x! G2 @' ]& |- a( z推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。
! G/ E" I, p# `
- H# z/ W9 ?1 b- [15.3.2 开漏输出* _8 Q, I; x$ F0 j; \

% _/ }+ t, s! B' J' S& J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

$ O8 g7 G0 c- w1 B+ U% R1 q, {, D2 v8 n' U: b' h, f1 F
开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:
- ~- X9 }% S# O
0 I/ K" O# ^% \# @; e% K5 f! _$ |输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
1 m" R6 O1 P# I/ J7 E开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。
4 Q1 K9 e/ G3 B5 [' x* m9 g2 U开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。$ \5 T6 p; @7 K+ M7 u# {  }
可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。
+ G5 J2 J; r' P4 j: ]/ T4 o) i& m# y9 ~( A1 ^
15.3.3 复用推挽和开漏9 C, t. f8 N+ L( j. a
复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。
  ~+ S0 E+ i2 P0 Z6 T+ x3 L' e; X6 I7 d" B+ O
15.3.4 四种输入模式
! E. U3 l& J( [/ p( ~

* y* Y3 ^* d7 e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
7 w! ?3 T4 c$ y6 i. M; E# _3 b

- M! `: }( r) U3 E6 v0 i1 V通过上面的引脚结构图可以得到如下三种方式2 K/ \1 l8 o9 v! P

$ ~8 H( e7 c' l1 c! C: N  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。
; F3 T) d; y: N/ T0 U+ ~  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。; S) e8 I8 @  e- e
  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。
$ @, Z& q5 c( U  D% r- z: n3 N+ E2 j! b, \; l

, J$ B7 [4 M* Q2 b. i3 ^而模拟输入模式是GPIO引脚连接内部ADC。) K, K( o1 j2 C6 ?$ |* N+ B7 e1 s

  h: I( @8 Q3 p
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

& Q! V# W6 {: ]
1 f' ]# ]+ w/ U) m6 m3 s15.4 GPIO的拉电流负载和灌电流负载能力
, S2 t/ p$ P" f- ]9 W: }! a这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。3 {+ a+ Z& {- R& c# u9 Y: G- m

/ G" {% B" ^- q. d3 N2 B  拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。1 T, D, n0 O' Y
3 Q' ^8 w2 @# E; }, Y1 W* k2 J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

4 k# ^8 t- M; h' u8 ], e2 ~) H6 ]& Z( {' O  z- H
  灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路
; t6 u' Z9 {: D2 V: i) m% }7 G% t4 y- E/ i8 `
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png

- N1 b) R, m2 d$ e' L5 B0 [" S( n$ B- n2 X5 n
有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):0 l: s" F! f6 l0 C, C. n
$ g' V8 l" z9 p  w  V. \) r) M
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
$ ]1 V: Y; r' h, B& u6 ]2 }" n
0 k* s: F) h+ d0 E/ ^, ~
通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。
/ v4 Y* m% X& {( }+ l
& d+ c% q8 K  h+ w; t8 O$ A15.5 IO补偿单元,用于高速5 T# ?/ X6 v6 i3 v# s2 s
IO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:) Y0 ~# o, ~* H; I% J

7 g" W* y. A$ S( ]
  1. /** @defgroup GPIO_speed_define  GPIO speed define' R! H7 ?" L1 M. T8 A: d0 ^  w% ~
  2.   * @brief GPIO Output Maximum frequency
    " o; c% e( ^. G) w1 I
  3.   * @{
    , ~1 ~( k7 x/ Z1 J0 [* L8 g
  4.   */  
    . B. Q' G  l2 u* U7 u
  5. #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */
    6 ?9 M! K+ L2 S$ s; z/ L8 U% a
  6. #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */
    0 U* N) q  V; w4 l  N: [: i2 Y
  7. #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */( ]+ J4 y0 w2 C, O$ `& Z
  8. #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
复制代码

2 r$ `" Y9 ?- b  r2 R# Y使用后两种速度等级的话,最好使能IO补偿单元。
9 Q7 _0 B% i/ ~7 I; j, O" N( X$ [  B2 R; ]  m4 Y* D
15.6 GPIO兼容CMOS和TTL电平
0 M/ J4 D& K2 iCMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结
- m4 X& G% @# v- z& W% ]+ y+ m% @# h4 n0 R8 E, ^5 ?4 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDUvMTM3OTEwNy0yMDE5.png
. e0 L/ B' F  S  v0 J: ^$ x

! c  K% q: d$ |: m3 B& C. D/ {15.7 不使用的引脚推荐设置为模拟模式
* v8 f) }- `) Q) z主要从功耗和防干扰考虑。$ k1 M/ |- W9 {: `, r

/ k3 U9 M+ |' U0 P6 G  所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。, b/ v! d2 v  G. p# d
  对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。
3 `8 d8 m/ ?9 y( @6 Q  若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。- _! H7 A/ |/ B1 W+ I
  任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。: a" N( i3 n# w. a1 ^4 k
1 w& p: ^: B# T8 Q2 }$ P

1 V, B3 Q9 t9 b5 \/ j) A综上考虑,不使用的引脚设置为模拟模式,悬空即可。3 X) v# P; c8 D$ n/ ^. d& ~4 z
* c9 F) Y4 r. h  V2 p; {5 }, S
15.8 总结) \& n7 p" h/ }  N2 E" X8 g% `
本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。
6 J& L2 U5 n7 ]- [
- N- z" I0 I/ I5 X* R' V& D& k% A
) {# K2 _9 m( M1 w. g4 y# K; @# G- o4 _+ |6 m7 }! I
赞 收藏 评论0 发布时间:2021-12-19 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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