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

STM32 GPIO详解

[复制链接]
STMCU-管管 发布时间:2020-12-7 13:19
STM32 GPIO详解

: q6 \; A; B4 \6 i
2 `$ B6 [3 N. L2 q
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。- u( }6 E' s7 ]8 |

, l$ D- N2 z) U- e. g. A% j
2 A5 {0 c: ?% A. @) H/ }) V
01、I/O接口电路" z1 K* y2 @4 ?
带FT的是说明可以容忍5V电压的,I/O电路框图5 V! F$ ^" B; V5 O1 W2 n2 `% L1 ^
11.png
1.1、普通输入
' S' O8 ~0 H5 z! d9 g( f: f5 W4 L9 {5 c普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式- G4 f( s/ e- ~6 v1 c3 I

; K5 B7 F% z1 \1 ^+ P! X% ?$ W
+ M# r( z0 Q1 s
1、浮空输入,不使能上拉电阻,不使能下拉电阻: _! W4 h6 o8 y' t, f
2、上拉输入,使能上拉电阻
8 V7 p' w* ^) B3、下拉输入,使能下拉电阻6 Z! @& y+ m* [8 Q
12.png
从上面框图得知,输出缓存是被禁止的
; u5 g! _3 M' {! ^" B
5 T# }, N6 E) i" Q3 w' O3 X

9 A" O& v3 e. f; }" r1.2、普通输出
3 ?0 H( U$ ^& ~0 r( S- z2 O普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式8 o  [: s. V# J1 `! `+ W

: ?( {+ d4 P- @1 ]4 P3 H

' X& @- C: }- l4 E开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)
: J$ _& l8 m. x/ B推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS
; |! F$ Q/ Y1 O9 K. P
13.png
从上面的框图得知,$ F0 r- \9 f1 Y$ n; c2 H

) W9 m- i! \  @/ s! k

% u" R6 c& S' J/ H, ?1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。
1 M- y( k  y% a) F: ?2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段( ]; E# F* v( }4 [/ w4 r* g

' c1 s% i& Y8 @; T: F! {) ]9 o

" v- U- s, O6 Z1 \7 Z1.3、模拟输入0 z7 r7 m$ b- o3 O$ o
模拟输入上拉电阻和下拉电阻是没有用的
4 Z& Y% `8 a. E/ Q2 R( u4 V
5 @2 n; g" g8 z1 f  o! T8 J
) p$ n; Z7 S$ A! e
高阻态下模拟输入7 @8 F- a1 @/ i$ C
14.png
从上面框图得知  ~+ o0 j6 e+ U

  k/ L, U8 X# d
. e) \3 o* |! p" [8 N) n
弱上拉和下拉电阻禁止
( p9 t/ y" t& s3 }
8 @: q+ h3 W6 H' b5 a" _/ u
3 s. ^7 Q9 O5 D4 ~& Q
施密特触发器停用,施密特触发器输出值强制为0. l+ q) b$ g3 V% a7 X0 S
, a( p6 L* n" T6 Y; Z! a$ r0 K- U9 R
8 {( F2 t' u# I8 H8 |
输出缓存被禁止
$ K# U3 M" g% {* X9 U; p2 I8 B7 m# Y6 G0 T
% u% l" i* q- [; D5 h% J7 V( o
读输入数据期存器, 读到的值为0
" u. N2 Q$ w1 A9 G9 G
6 {. D6 X0 X+ i
7 P' I/ n1 f9 }) _
注意:IO配置成模拟输入时,不能容忍5V电压
2 N+ z- q) F; p) L/ l2 k! |5 q) m. E; F

* U8 q/ V0 P  ~/ N5 }, X1.4、复用输出* M' v0 v' P! k9 t
复用输出框图
9 a1 K: Y# {& B& u8 U
15.png
从上图框图中可以得到5条信息) s4 j2 F* e$ k5 P- y6 B! [& N

- w" W' e: L6 g7 {- P" t

6 F. j7 W$ H2 k* `( e- R: G1 r输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的+ \" d3 d7 n( Y

/ P2 S7 @, J. J- T9 e

9 _+ h' J$ G1 J. R3 }由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出
( F7 z3 e9 g' P4 q. R6 D' o. V) ?
+ w" A$ }; r- L. z9 a
" i& B( j5 H, Z; r
上拉电阻和下拉电阻使能,可以进行配置( \" p2 x3 x: i; ~7 }& N
1 v+ k3 g* J. l/ P
; R$ k( n8 h! o  H& I* ~: Q* V0 U
TTL施密特触发器使能
& E9 F3 S" h3 T* n" n' D, ]) d' u# b1 y# k3 U) ?& C
  {0 J$ r2 ]' ]7 K' ^
可以通过读输入数据寄存器, 可以得到 I/O 的状态: U3 r* N7 c! W' [

; i( s- X% e. x1 w) @" G02、管脚复用和重映射# M& ~: Q7 m+ A, s& R
管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能
& x/ ^+ `' i3 f/ a1 W
9 a+ I# P& s5 ^& W& ?% W6 d
  J/ Q2 w7 p. A8 x& X" b1 q. C
2.1、STMF10X系列
0 h- c6 ]2 _! YSTM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。  P0 ~, S% v. ?1 C" J0 [5 g
16.png
三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。6 ^( S: `% U4 ]3 G+ ^3 |

$ x/ i7 \+ V0 D  v! _% D0 \; r

- r* U! S* A  N% m) ]( J; tSTM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:; C+ E+ y% B/ `/ h6 ?
17.png
重映射步骤为:
- M; r7 a) v: q3 ~' h9 E7 N9 s7 M% f; c1 h  X; _9 ?

+ S/ J$ v$ Z4 [& I3 d3 U/ w1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
# M* o5 a1 c- i: `6 {! [  g
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码
2.I/O口重映射开启.
9 B; F" E1 K+ F+ ^6 x2 w, W! S- S; q( h2 F2 j4 ]8 ^! @

8 t1 b2 n" y: \9 ?( e" Q. P6 yGPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);1 C% |2 T) i3 V2 R  s8 Q: S
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.​​​​​​​" l8 K/ f$ I! U5 y0 N* n
  1. ! N0 }- h% Q0 Q6 z5 h/ k
  2. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
    " S3 [: Y+ Y# l, Z. n1 U
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
    ( R. A/ A" A9 {3 u- D3 X
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;) Z; ]6 U& r; m$ D% k
  5. GPIO_Init(GPIOB,&GPIO_InitStructure);
    - D5 y/ O/ K$ ~7 D. K  H$ M
  6. * I8 i( e; _6 Y8 B9 U' Z
  7. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
    * a: v" D, e# r! \( w
  8. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;9 @( V6 I  y# s" ^8 Z- o- p+ g
  9. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码
2.1、STMF20X系列' S3 ^8 s5 U$ B9 ^
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。% F# I8 u9 ]' l) e9 K! N  f: n
18.png
从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:) X  D3 d0 L3 o
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码
19.png
从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。+ y: c* Q2 w  E% n
: J% \: D0 ]* i

9 x: d3 U0 i7 b: J% A备注:要先配置GPIO为复用功能,再调用复用的库函数
& c7 {. G' h- {9 k* |5 O" V
20.png
03、相关名词解释# _5 X, D" W+ _& ?3 H" b! @
GPIO模式名字解释
# B% A& z: r; O; U5 F4 s
21.png
F20系列:GPIO共有四种功能​​​​​​​
& s2 x5 i% u3 ^( P
  1. typedef enum: b$ W% x6 [4 X
  2. { # Y) I) a* m3 J4 u
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
    5 @9 I$ _- f4 q; I
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
    9 }' U( Z* Q( B) Z! H
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */0 t" f4 @( @" o
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */5 g/ B9 x4 @  X& \4 {/ T
  7. }GPIOMode_TypeDef;
复制代码
GPIO状态
/ C. U5 P& X- Y4 ~& h% B
& ?7 I( Y3 F  Z7 {( |2 d* s
# J7 M& R$ l' A; a0 F
推挽输出
) x* O- k( o( u: v( z
; w  @* g  N  |% m# `# [

- P3 W! g6 F  D5 N0 W" v可以输出强高低电平,连接数字器件。; \/ T& T! }& M1 Z; i/ o

  z- O% D+ J5 }
- H' R2 W1 K. ]  k6 N# Z
开漏输出; R5 q$ s4 I8 i" \+ a) _4 [3 P# u2 o

3 {( l2 D9 w% W4 L( \4 k

3 v# ]2 U/ n7 ]( B; P只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)6 h" q" y- t2 b* ]! o
7 R# x% C# H' z8 P
% ?' j; N5 S- M
高阻态
$ c9 O: m: o! G  A+ L% m& j' R. v  I7 o6 B
' K- @! W/ q; I6 k3 U* X# }, Z& q  ^
高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。/ ^4 ]! c. b$ [# @
% {& X8 N/ W' C5 O* g6 m3 u
! ?! q" x1 e+ H
; C+ M1 E% ^8 j! A
/ t8 Q4 ~/ S; V/ |

/ n$ D! E; }" y+ T$ N  _- e
" _; m3 G0 B; r2 }1 p) n7 |3 F7 q3 u7 L

* K+ _1 y( B  w/ f$ n
赞 收藏 评论0 发布时间:2020-12-7 13:19

举报

0个回答

所属标签

相似技术帖

官网相关资源

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