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

STM32 GPIO详解

[复制链接]
STMCU-管管 发布时间:2020-12-7 13:19
STM32 GPIO详解
' q; A7 }: v! c, @7 `/ X
0 g8 P- I7 q, ^% e3 F, G
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。! }; s/ M1 a' s- M0 f

- g% X4 I& X: c2 |' E
8 L( |3 t2 j$ w: M7 N4 `
01、I/O接口电路
0 @6 E& q9 D* t5 I  Y* l: V带FT的是说明可以容忍5V电压的,I/O电路框图
6 B6 n. R# T8 q( t8 G9 }% q
11.png
1.1、普通输入
4 W/ |% w1 p6 d  n% x普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式
& w  j) ]- F2 y' Q2 e% ^$ O- i7 O
. ~8 q  @+ V) z$ M2 L( E+ k

! ]2 G8 x/ Z1 m1、浮空输入,不使能上拉电阻,不使能下拉电阻* r: w' A+ ?4 J! T6 u
2、上拉输入,使能上拉电阻/ c+ c0 `* Z1 _1 @& j5 e
3、下拉输入,使能下拉电阻
$ ~: a/ R/ Q0 z" B' r0 S; R0 D
12.png
从上面框图得知,输出缓存是被禁止的
* @9 v4 B6 x0 H4 E, G4 F: D
, Y2 b! i& f8 X
) Y0 z4 c' m- n5 p, ^( f
1.2、普通输出5 a' Q/ n: ]  K' }" u6 |" u9 T
普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式+ ^" b9 h6 }& M1 j+ I: c8 j
5 u: ~1 v; ~3 F8 o  _& _

5 t  Z/ s0 r6 G8 L0 ^& v0 r9 J* B开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)% Q- O; `& h+ i; A3 p+ H
推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS
" j% e9 X. Z5 _. J
13.png
从上面的框图得知,
0 p1 h  s4 _5 |9 j: s! f' {1 Q/ a- e2 m
* u: C7 W; b; K0 y8 Q
1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。" y: T9 t4 f* N: S
2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段0 G7 U& Y# h: L9 M

& I9 {/ B) u; O! F$ f2 g

2 Z7 Q0 X# e) ~9 |7 w$ E6 H1.3、模拟输入
* \3 n+ O' h& u  r/ t+ z9 i4 v模拟输入上拉电阻和下拉电阻是没有用的1 [: [+ K" h( [" P/ w6 Q9 e

2 a$ g4 F% k: N5 }+ G" ~; D
& m# |7 I% \; s
高阻态下模拟输入+ A: P5 w, Z+ r6 Z. W0 i" @) u
14.png
从上面框图得知* b- S6 E% s- `. q3 m

3 z6 u3 C+ C) {; b9 g% o# \* M
( P/ B1 U' H2 f. ]5 u
弱上拉和下拉电阻禁止
& D8 C. t& M7 b
: a  d7 d) u, ^) Y. J9 l& C

% G, G# M$ o2 ]7 ~$ S: f) `施密特触发器停用,施密特触发器输出值强制为06 O9 {. p5 a7 L2 ?% P; A* U1 j
* A. l1 m- D0 {* l3 X
6 M1 }* i8 U/ b  }
输出缓存被禁止( F/ _5 P2 }* f- v! f
$ h, ]' l0 n9 \
8 I- F3 G0 k7 @) ~* ]" e# v% P
读输入数据期存器, 读到的值为0
( _) [8 {1 s5 J. y" ~7 f& Z: a7 R( |. _/ ^/ W2 t  i
# O+ e$ c6 A# h6 v; \
注意:IO配置成模拟输入时,不能容忍5V电压
. P4 ^# w$ e! z/ c+ U, B
: e2 a1 _4 W  t
) `- a! G2 l" E- G/ l+ t9 D
1.4、复用输出
# p, @' T0 `3 ~复用输出框图
3 ~/ a1 S* o# w/ s0 J3 O0 y0 A* Q' l+ g
15.png
从上图框图中可以得到5条信息+ r6 @6 ^& }4 A/ E: h# W$ e. A$ F

6 {% c+ O  s! N. {9 @

/ A( e5 Z2 |; J8 n! y7 T" i. L/ l输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的! E5 F* m2 r% g+ f
  p# c' m" u1 O
) P, L) x# G+ }8 S& h- ?
由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出
% X1 D: R4 L" e9 j8 V: [
& ?) P7 E, g' b& b* t) w! k* x
; R: ?$ n+ ^2 [- y1 n! u
上拉电阻和下拉电阻使能,可以进行配置8 ^4 R4 `' I+ y# e
$ |/ _# k1 S6 V# D  y
7 O1 P6 ]6 M- ]( }0 p% f4 g
TTL施密特触发器使能
/ h+ \2 ~+ ]( @6 t
" r* `0 x5 H& }) }
8 Q- P* j' T( g- b1 J( |8 ?
可以通过读输入数据寄存器, 可以得到 I/O 的状态* w& {1 d- ?' T& a2 M
6 N  H* `0 F# t; W* A
02、管脚复用和重映射' r1 f* p" A) t5 o
管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能' q4 y) T$ ^! X& U

6 C5 q$ V' S* N8 p) X
7 l0 `9 J2 W# W! c
2.1、STMF10X系列
  ^  C! `! }' D' c: G4 n8 b1 J5 dSTM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。
6 @* o# ~. q' x9 m4 A8 ]0 w; o9 Z
16.png
三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。
" B, B5 q3 l5 K8 s. j/ g
. y2 q0 C) v( p0 h" j5 I; D, |9 n

& T$ O2 t. f$ f0 u5 X& a: [STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:3 b- O# N$ T5 B
17.png
重映射步骤为:- B0 [8 u* F4 u2 ]  ?
' h8 }5 _, n$ a
+ I* ^1 X; k9 m
1.打开重映射时钟和USART重映射后的I/O口引脚时钟, % }/ r8 F8 X/ M. w. E6 H) Y
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码
2.I/O口重映射开启.
5 r* j0 r+ s% k
6 g/ X! c* _1 ~  c2 f
7 H! F: ?% @2 P4 T7 M, m
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);/ ]  j  V' P* [/ E  H& b
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.​​​​​​​9 t: Q) h; c, J" l' @
  1. 7 y& \$ h! g- C
  2. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
    1 A# p3 m8 d( [4 M# @7 Q- Y
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;( W: H; r$ e9 _0 y, T0 \
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;* f6 l/ D- P( |: W! u
  5. GPIO_Init(GPIOB,&GPIO_InitStructure);7 W. P$ x+ f) s9 O

  6. # v" g! M( b/ }8 q
  7. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
    $ c" @4 B+ T* c% Q! {5 q
  8. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;6 M& y% Z$ M1 |3 K
  9. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码
2.1、STMF20X系列( v5 I# H* L/ V( T
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。* l. i% {# T$ E, `) o6 B7 T5 q# U( `
18.png
从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:5 m2 ~! ^  n2 e
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码
19.png
从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。! v! ^7 k; W& k% Z9 ~# S- f# J! W
+ z' C6 @' @$ w) Z$ C' v
6 r) {) k) n$ H' H* X2 q# Y
备注:要先配置GPIO为复用功能,再调用复用的库函数" L7 Y1 X- m  [
20.png
03、相关名词解释
' \/ u; X8 c* S0 d; I& _0 XGPIO模式名字解释8 O, W1 F$ }4 K  R/ S
21.png
F20系列:GPIO共有四种功能​​​​​​​5 u  U' C6 k% P5 ?! r# I
  1. typedef enum7 b6 e& {% F3 K4 x: I
  2. { 5 g6 R, _& y$ T7 ?# u1 O
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
    # f7 L. l  n( l
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */" ?! r( r  z$ _% j8 K3 s0 ^
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */8 f  \& {8 r8 ^- p( X  M) v
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
    5 m6 c% O" B, [6 h& }$ c& |. ~
  7. }GPIOMode_TypeDef;
复制代码
GPIO状态/ G: D" y5 `# R& r% K, [4 }9 N

7 r* w- y0 z/ t6 {& r7 D
) @7 [  W) l. T& y8 T
推挽输出
! `5 Y7 w: {0 u6 E' C4 d; _5 _0 ~9 Z
, H( x% e1 @' u  e% g  }; B
可以输出强高低电平,连接数字器件。! T; H/ O3 R- T: A" H- s
# w0 u& n& T; J' N( p% x
. r* k! h2 Y! _( r, ^# M
开漏输出
' d1 J; l) u- _' t- m* p. g2 {* h4 J+ w- u+ H4 y9 ]4 t
+ v9 Z2 M; c( T$ o: ~0 }
只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)
8 u  m9 R  Y! Z7 L1 H4 Z' l* F3 Q$ h$ a: _6 G. ~

* R8 F+ T1 D( n5 d' W; }: {! `6 M高阻态
7 b  X  ^* C: n4 [, O$ g
. q; V5 i3 O& `
8 X2 \0 s& l$ T0 L( F
高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。
! A! p6 Z: t9 G) F0 d" f  r, m/ s$ _" G( i( c# e; W
' O9 X3 n, ?0 M; N1 W1 S( K

2 Y4 C9 d  b& k9 K2 C

- i" d* X. d- N$ O! c$ O) g0 n# ^1 Z5 C  v1 p

5 @% J6 y  b5 q3 I) p  o, \& L
+ [! f9 H+ X! j$ Q8 M
收藏 评论0 发布时间:2020-12-7 13:19

举报

0个回答

所属标签

相似分享

官网相关资源

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