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

STM32 GPIO详解

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

/ W" k  q1 i- m3 t1 T# U

3 e  P& Y% S7 }下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。
+ [" U3 B; I/ A* Z1 G
2 ~% |% o$ F& n2 j7 f9 b4 P
- o3 Q. ^* U$ O1 P& P4 c, z
01、I/O接口电路1 ?* l8 I+ o4 m: p- h
带FT的是说明可以容忍5V电压的,I/O电路框图, v( R* d: l* a4 q$ Q
11.png
1.1、普通输入
/ a, I5 v8 b8 {& A4 I7 `7 _9 o, u普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式" \  k- Z) L2 M, m$ [8 r
* T8 \* s2 g. L. v( Z' h2 \
6 a2 F) s8 x, {
1、浮空输入,不使能上拉电阻,不使能下拉电阻
# u6 r! p/ q9 a2 Q. }2、上拉输入,使能上拉电阻
" ~; t! p# f- i; d3、下拉输入,使能下拉电阻" R9 A  b+ j: s" x: O- B1 S( h* I
12.png
从上面框图得知,输出缓存是被禁止的
! i4 V2 D; [+ p  Q! }! B! ~
0 T1 M( C8 l% v" Z

8 e/ @0 R& Y! X1.2、普通输出
6 _6 f9 ~& W3 q& [: G# ?1 O普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式: j# a* r5 Z: e2 {

" i  z! O% l+ i, q
( C- s0 j& {# ^- a3 D4 W  W: l
开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能); G$ Z2 s+ `4 L& q, O" \
推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS7 M- h8 g. ]$ a2 F
13.png
从上面的框图得知," w, [$ Y9 Z" l( j* a! [2 ~
' x1 B% [; b2 _* G1 T
8 T3 i. o* \$ D
1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。; t+ s) I: O/ f! O; h: d
2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段
. q7 H" I' _& `* S3 |  e# }+ A6 M* ~; T6 M

  [+ k, L. f, e  N! w. m3 _7 r1.3、模拟输入- v) c5 k1 `* s5 j; k
模拟输入上拉电阻和下拉电阻是没有用的6 [1 z: l& _  O7 r/ m
3 T3 w4 M6 \. P- \5 e0 Y# Z* i
" h. U) x0 t6 e2 T
高阻态下模拟输入% v. b" R  S' o# @* L
14.png
从上面框图得知: k- d& S  t5 u. s
, B" s- B( V. v% m8 S
/ V! X$ B$ {) E! l, u. ]
弱上拉和下拉电阻禁止
6 l: p: Y* J5 }+ c; X( S" C0 z+ O! j
& Q4 y1 J; t9 C7 c: S- @' F
施密特触发器停用,施密特触发器输出值强制为0
( W8 ]' x6 N7 l7 t! a: R" j
: H5 X! d9 w+ r' r3 T& n

/ H8 a' x. h7 e/ R$ q$ O8 N3 ?输出缓存被禁止# }' U5 q: Q9 M+ X  H

  \* a: F9 L. m$ i, y  h, ~
" x% q$ S, p6 L# q2 Y' t- B- k
读输入数据期存器, 读到的值为0
4 R0 U9 h7 l" o( P4 c* |) {2 H6 x$ x

7 T7 a( ~$ {5 q$ O: ]注意:IO配置成模拟输入时,不能容忍5V电压
5 A  C, b3 X: F/ p  J% q
2 H4 C4 S4 i, }5 i8 ?1 V3 S) S

% u$ \( R5 \6 m6 K% X1.4、复用输出
" M& r' M4 C( a$ b复用输出框图
7 r0 F: e9 _. X" F! |
15.png
从上图框图中可以得到5条信息
" }# U' E5 j# q+ \6 ?- y! z( y/ h5 F0 M$ M4 O

. [- r1 W2 Y# m输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的( X, m* m( n- G$ r6 R

, X' s$ h: q3 y0 x8 d+ V
* v( T7 q3 G6 M1 B
由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出8 _) P1 r( l( Y" u2 V. L

% L7 \/ g* M; f$ p1 t

+ @" M3 M4 r# Y. J* Z  k5 T9 V上拉电阻和下拉电阻使能,可以进行配置
2 j- l# C9 R1 Y' b, H* i1 ^7 Z- u
3 t/ z7 `7 p4 L: w. \6 U
TTL施密特触发器使能
% N  O( k) |0 L5 p$ [
" Q9 K! Y& `6 Q& ]. X

6 {2 D4 B, b- i1 e. C: c9 x3 j可以通过读输入数据寄存器, 可以得到 I/O 的状态& R- T! v/ e' B3 L: x0 e5 p
. D8 y- Z# X4 g: i2 U* {& j7 }
02、管脚复用和重映射
" r4 e- k) ?- S  v/ e; O管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能! b& q% T4 @9 H* R+ D  [) \' f
0 `4 H# F) n  B6 q+ C( A2 n% n
. ^* j" s! h/ ^5 F. K6 N2 V. x
2.1、STMF10X系列6 s  H1 Y' w3 t3 L; O! f, j8 n1 g
STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。
3 r" W- n! [* M  i' w
16.png
三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。
( P+ R0 b1 \  P& O
% h8 w; M9 W3 X/ _; y
; J9 C' ]# H5 Z
STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:
8 G+ q( l$ z3 X5 i  Y
17.png
重映射步骤为:5 {* ]1 O2 K0 M5 G% K

1 a, O/ ~8 Y5 u% k  }4 N

" Y3 V# t' j0 d' z' b1.打开重映射时钟和USART重映射后的I/O口引脚时钟, * L% `( O1 B6 G( P$ R) `7 L! \
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码
2.I/O口重映射开启.
% w- p. \6 O7 R5 ]
3 o; Y: M8 z6 }; i. P- p- U4 c

5 ^6 j' _4 ]2 DGPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);3 O) L, e5 a3 D' w3 @# f) u) q0 J
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.​​​​​​​
9 Y4 I! I0 ?9 y* K
  1. 4 m/ @7 h; C: y9 f/ A
  2. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;( |# v1 d+ h  J2 @: u2 E
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
    : u! E# J; D5 h# r
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;, ]# a: I# P0 C! c5 q
  5. GPIO_Init(GPIOB,&GPIO_InitStructure);- s# ^/ z5 d* O( M' q2 d+ m2 |

  6. - k" V; [  _( ^, P9 c% z
  7. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;0 b1 r4 O# S$ k9 q
  8. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;/ i/ l; @  x1 A$ M. D
  9. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码
2.1、STMF20X系列' E( ]) g8 A6 }: l" H- h$ J
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。
; A# ]/ ?' {: F2 K8 Z. _
18.png
从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:
0 P5 L5 m1 u9 g
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码
19.png
从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。$ Q6 I$ i2 ~! d

2 x, J" h$ z; k5 c' Z. Y% ~8 S9 q

: c/ I1 c; x" o, ~/ P) P$ s8 a备注:要先配置GPIO为复用功能,再调用复用的库函数
9 M9 E: {/ p, h8 b$ e" ?% |
20.png
03、相关名词解释
, x" F6 B0 d  fGPIO模式名字解释
) j6 [, V3 g4 ~. k9 x0 l6 Z
21.png
F20系列:GPIO共有四种功能​​​​​​​
# g* y5 r2 r! V# t' G3 @5 ]
  1. typedef enum
    , ?; q$ ~: w' \5 u. J. p$ E1 O
  2. {
    & Z# F! o$ A$ a) x
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */  ?, n. t" y( Z1 V9 `$ f
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */6 a8 _5 P4 c7 `% S9 U. l; q& Z& g
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */: F. Q; X5 K2 X; L- @% o( H+ x. ^
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */- Y7 A" I3 H6 h$ Q) j2 O- m
  7. }GPIOMode_TypeDef;
复制代码
GPIO状态1 m8 P; f- K" Y
2 D4 k0 ^2 B2 W
9 _+ p9 ^9 F3 d! g
推挽输出+ G; H" }- l! c& V2 J

: i: |; z9 `6 M# Z0 \' L
4 J2 j$ ]5 b' R( w- |8 @
可以输出强高低电平,连接数字器件。8 k" J9 P/ [! @% w8 ~: E: }$ ^

+ N$ t2 h- [8 Y) J* ?, ^7 N
$ V# V- l) O: P$ Q
开漏输出
9 O4 y) H/ i) r* ^. a; _5 X5 W5 |2 K) X! f% ^* H7 Z" O- m
2 k- ?. z* {& W# j) n
只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)3 ?2 W% g% u' T: h
7 c$ |* x6 l$ N& v  ~8 }
- v0 H8 O: s0 Z. E
高阻态5 Q  |7 d, ~$ }
4 {- z9 b; ^7 a  J4 ?
# Z3 S2 j1 A7 i0 p- ?  H4 H1 E$ j
高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。
' E9 i" @0 s/ @! A( j1 z% q) A. @- H
% ^+ O) |9 O4 M% `' M

: o$ O0 Z& d/ K/ |
! R3 H5 q" k' T2 r

, a# S$ {# _3 t+ y' P# o) @5 d% K" ?$ A+ |, O

0 l% o2 j+ @1 n" @9 {% u
- t! F- Z6 G/ z
赞 收藏 评论0 发布时间:2020-12-7 13:19

举报

0个回答

所属标签

相似技术帖

官网相关资源

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